目录
Spark进阶
一.在Spark shell中使用不同的数据源
1.通用Load/Save函数
(1)load函数是用在Spark SQL中,加载不同的数据源
默认的数据源是:Parquet文件
通过修改:spark.sql.sources.default参数可以修改默认的数据源
(2)加载Parquet文件,从而创建一个DataFrame
val userDF = spark.read.load("/root/temp/users.parquet")
查看表的结构和数据
userDF.printSchema
userDF.show
(3)显式指定加载的文件格式
val usersDF=spark.read.format("json").load("/root/sources./people.json")
(4)save函数的存储模式:
默认模式是error,如果数据(目录)已经存在,就会报错
append模式:追加写入
overwrite模式:覆盖写入
ignore模式:如果数据已经存在,将不会保存
例子:查询用户的名字和喜欢的颜色,并保存
userDF.select($"name",$"favorite_color").write.mode("overwrite").save("/root/temp/result/parquet")
验证
val testResultDF = spark.read.load("/root/temp/result/parquet/part-00000-d1b9c43c-2ef6-4c48-b5a0-af382751b088-c000.snappy.parquet")
testResultDF.show
2.掌握Parquet文件
(1)Parquet是一个列式存储文件、是Spark SQL默认的数据源,并且支持对其的读写,也就是自动保存原始数据的Schema。当写Parquet文件时,所有的列被自动转换成Nullable。
(2)把其他类型的数据文件(json文件)转换成是一个Parquet文件
读取json文件
val empJson = spark.read.json("hdfs://centos:9000/emp.json")
转成Parquet文件
empJson.write.mode("overwrite").parquet("hdfs://centos:9000/parquet")
重新从该目录读取数据
val empParquet = spark.read.parquet("hdfs://centos:9000/parquet")
注册为视图
empParquet.createOrReplaceTempView("empview")
进行查询
spark.sql("select * from empview where deptno=10 and sal>1500").show
(3)支持Schema的合并
定义两个DataFrame:表
val df1 = sc.makeRDD(1 to 5).map(x=>(x,x*2)).toDF("single","double")
val df2 = sc.makeRDD(6 to 10).map(x=>(x,x*3)).toDF("single","triple")
保存到目录:默认是Parquet文件
df1.write.parquet("hdfs://centos:9000/parquet/test_table/key=1")
df2.write.parquet("hdfs://centos:9000/parquet/test_