Spark SQL2.4.8 Load和Save函数
一、测试数据
- users.parquet
点击下载 - people.json
{"name":"Michael"} {"name":"Andy", "age":30} {"name":"Justin", "age":19}
二、通用的Load/Save函数
-
什么是parquet文件?
Parquet是列式存储格式的一种文件类型,列式存储有以下的核心:- 可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。
- 压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。
- 只读取需要的列,支持向量运算,能够获取更好的扫描性能。
- Parquet格式是Spark SQL的默认数据源,可通过spark.sql.sources.default配置
-
通用的Load/Save函数
-
读取Parquet文件
val usersDF = spark.read.load("/root/resources/users.parquet")
-
查询Schema和数据
-
查询用户的name和喜爱颜色,并保存
usersDF.select($"name",$"favorite_color").write.save("/root/result/parquet")
-
结果验证:
-
-
显式指定文件格式:加载json格式
- 直接加载:
val usersDF = spark.read.format("json").load("/root/resources/people.json")
- 直接加载:
三、存储模式(Save Modes)
可以采用SaveMode执行存储操作,SaveMode定义了对数据的处理模式。需要注意的是,这些保存模式不使用任何锁定,不是原子操作。此外,当使用Overwrite方式执行时,在输出新数据之前原数据就已经被删除。SaveMode详细介绍如下表:
Demo:
usersDF.select($"name").write.mode("overwrite").save("/root/result/parquet1")
将结果保存为表
usersDF.select($"name").write.saveAsTable("table1")
也可以进行分区、分桶等操作:partitionBy、bucketBy