Spark SQL数据源 - 基本操作

Spark SQL 提供了丰富的API来与各种数据源进行交互,包括Parquet、JSON、CSV、JDBC等。以下是一些使用Spark SQL与数据源进行基本操作的基本步骤和示例代码。

1. 初始化SparkSession

首先,你需要初始化一个SparkSession对象,这是Spark SQL的入口点。

scala 复制代码
import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .appName("Spark SQL Basic Operations")
  .master("local[*]") // 在本地运行,使用所有可用的核心
  .getOrCreate()

// 导入隐式转换,以便可以直接使用DataFrame的API
import spark.implicits._

2. 读取数据源

读取Parquet文件
scala 复制代码
val parquetDF = spark.read.parquet("path/to/your/people.parquet")
parquetDF.show()
parquetDF.printSchema()
读取JSON文件
scala 复制代码
val jsonDF = spark.read.json("path/to/your/people.json")
jsonDF.show()
jsonDF.printSchema()
读取CSV文件
scala 复制代码
val csvDF = spark.read
  .option("header", "true") // 如果CSV文件包含标题行
  .option("inferSchema", "true") // 自动推断列的数据类型
  .csv("path/to/your/people.csv")
csvDF.show()
csvDF.printSchema()

3. 处理DataFrame

选择列
scala 复制代码
val selectedDF = parquetDF.select("name", "age")
selectedDF.show()
过滤数据
scala 复制代码
val filteredDF = parquetDF.filter($"age" > 20)
filteredDF.show()
分组并聚合
scala 复制代码
val groupedDF = parquetDF.groupBy("age").count()
groupedDF.show()
排序数据
scala 复制代码
val sortedDF = parquetDF.orderBy($"age".asc)
sortedDF.show()
连接DataFrame

假设你有两个DataFrame,df1df2,它们都有一个共同的列id,你可以使用join函数将它们连接起来。

scala 复制代码
val joinedDF = df1.join(df2, df1("id") === df2("id"))
joinedDF.show()

4. 将DataFrame写入数据源

写入Parquet文件
scala 复制代码
parquetDF.write.parquet("path/to/output/people.parquet")
写入CSV文件
scala 复制代码
parquetDF.write
  .option("header", "true")
  .csv("path/to/output/people.csv")
写入JSON文件

虽然Spark不直接支持将DataFrame写入单个JSON文件,但你可以将数据写入到一个JSON文件夹中,每个分区的数据会写入到一个单独的JSON文件中。

scala 复制代码
parquetDF.write.json("path/to/output/people.json")

5. 停止SparkSession

完成所有操作后,确保停止SparkSession以释放资源。

scala 复制代码
spark.stop()

这些示例展示了Spark SQL与数据源进行交互的基本操作。你可以根据自己的需求进一步扩展这些示例,使用更复杂的查询和转换来处理数据。

相关推荐
异次元的星星1 小时前
智慧新零售时代:施易德系统平衡技术与人力,赋能门店运营
大数据·零售
深思慎考2 小时前
ElasticSearch与Kibana 入门指南(7.x版本)
大数据·elasticsearch·jenkins
银行数字化转型导师坚鹏3 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信
悠闲蜗牛�3 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
ml魔力信息4 小时前
活体检测与防伪技术的安全与隐私分析
大数据·人工智能·安全·隐私保护·生物识别·活体检测
XYiFfang5 小时前
【MYSQL】SQL学习指南:从常见错误到高级函数与正则表达式
sql·mysql·正则表达式·regexp_like·group_concat
数据要素X6 小时前
寻梦数据空间 | 架构篇:从概念到落地的技术实践与突破性创新
大数据·运维·数据仓库·微服务·数据治理·数据中台·可信数据空间
十碗饭吃不饱7 小时前
sql报错:java.sql.SQLSyntaxErrorException: Unknown column ‘as0‘ in ‘where clause‘
java·数据库·sql
IT学长编程7 小时前
计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·毕业设计·课程设计·毕业论文·海洋气象数据可视化平台
呆呆小金人7 小时前
SQL入门: HAVING用法全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师