Spark 2.x管理与开发-Spark SQL-使用数据源(一)通用的Load/Save函数

1)什么是parquet文件?

Parquet是列式存储格式的一种文件类型,列式存储有以下的核心:

(1)可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。

(2)压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。

(3)只读取需要的列,支持向量运算,能够获取更好的扫描性能。

(4)Parquet格式是Spark SQL的默认数据源,可通过spark.sql.sources.default配置。

2)通用的Load/Save函数

(1)读取Parquet文件

val usersDF = spark.read.load("/root/resources/users.parquet")

(2)查询Schema和数据

(3)查询用户的name和喜爱颜色,并保存

usersDF.select($"name",$"favorite_color").write.save("/root/result/parquet")

(4)验证结果

****************自己操作***************

在Spark SQL中,可以使用各种各样的数据源来操作,Spark SQL优势:对数据源兼容性好

使用load函数、save函数

 load函数:加载数据的函数;save函数:存储数据的函数

注意:使用load和save函数时,默认的数据源是Parquet文件-列式存储文件

举例(1)-parquet文件的读取与写入:

转到路径:/usr/local/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources/

将users.parquet文件复制到tmp_files目录下

 

接下来用这个案例文件进行操作:

 

由此可以看出,parquet文件本身自带schema

也可以将结果写到某个路径下(最终文件夹不能已存在)-.write.save

scala> userDF.select($"name",$"favorite_color").write.save("/usr/local/tmp_files/parquet")

注意:写到本地目录下的前提条件是启动的为伪分布式集群(Master和Worker在一个节点上),如果是完全分布式,就写入到HDFS上。

发现它自动创建了一个parquet文件夹:

 

现在进入parquet文件夹下查看:

 

读取part-00000-...文件(只读取前两列)

 

也可以直接读parquet这个路径,结果相同

 

 

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3