Spark SQL数据加载、存储概述

【图书介绍】《Spark SQL大数据分析快速上手》-优快云博客

《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书

大数据与数据分析_夏天又到了的博客-优快云博客

Spark SQL支持通过DataFrame接口对各种数据源进行操作。DataFrame既可用于关系转换操作(指的是map、filter这样的DataFrame转换算子操作,同RDD的转换操作一样是惰性求值),也可用于创建临时视图,即将DataFrame注册为临时视图,进而对数据运行SQL查询。

本节介绍使用Spark SQL数据源加载和保存数据的一般方法。

6.1.1  通用load/save函数

Spark SQL的默认数据源格式为Parquet格式。当数据源为Parquet文件时,Spark SQL可以方便地进行读取,甚至可以直接在Parquet文件上执行查询操作。修改配置项spark.sql.sources.default,可以修改默认数据源格式。

以下示例通过通用的load\save方法对Parquet文件进行读取和存储

val usersDF = sparkSession.read.load("examples/src/main/resources/users.parquet")

usersDF.select("name", "favorite_color").write.save ("namesAndFavColors.parquet")

正如前面所讲,sparkSession是Spark SQL的编程主入口,在读取数据源时,需要调用sparkSession.read方法返回一个DataFrameReader对象,进而通过其提供的、读取各种结构化数据源的方法来读取数据源,其中包括通用的load方法,返回的是DataFrame对象。

### 多数据源操作概述 在Apache Spark SQL环境中处理多个数据源是一项常见需求,允许用户从不同类型的存储系统读取写入数据。通过Spark SQL可以轻松集成多种数据源,包括但不限于Hive表、JSON文件Parquet文件以及JDBC连接的传统数据库[^1]。 对于多数据源的操作主要涉及以下几个方面: #### 数据加载保存 - **加载外部数据**:可以通过`DataFrameReader`接口指定不同的格式来读取来自各种来源的数据到DataFrame对象中。 ```scala val dfFromJson = spark.read.json("examples/src/main/resources/people.json") ``` - **保存结果至目标位置**:利用`DataFrameWriter`类可将转换后的数据写出给定路径下的特定文件格式或者关系型数据库表格里。 ```scala df.write.mode(SaveMode.Overwrite).jdbc(url=jdbcUrl, table="my_table", connectionProperties=connectionProps) ``` #### 跨数据源查询优化 当涉及到跨异构数据源执行复杂SQL查询时,为了提高性能应该考虑如下策略: - 使用广播变量加速小规模维度表与其他大规模事实表之间的关联运算; - 对频繁访问的数据集实施缓存机制减少重复扫描开销; #### 实现案例分析 假设存在两个独立的数据源——一个是位于本地磁盘上的CSV文档集合表示销售记录,另一个则是远程MySQL服务器上托管的产品目录信息。现在希望构建一份报告统计每种商品类别在过去一个月内的销售额情况,则具体做法如下所示: ```sql -- 创建临时视图以便后续引用 CREATE OR REPLACE TEMP VIEW sales AS SELECT * FROM csv.`/path/to/sales/*.csv`; CREATE OR REPLACE TEMP VIEW products AS SELECT * FROM jdbc.`jdbc:mysql://dbserver/products`; -- 执行JOIN并聚合得到最终报表 SELECT p.category, SUM(s.amount) as total_sales FROM sales s JOIN products p ON s.product_id=p.id WHERE date >= DATE_SUB(CURRENT_DATE(), 30) GROUP BY p.category; ``` 上述例子展示了如何借助于Spark SQL强大的抽象能力简化了原本复杂的ETL流程,并且能够高效地完成对分布式的海量数据进行实时分析的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值