通用负载/写方法
手动指定选项
火花SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行抽样方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。
火花SQL的默认数据源为铺格式。数据源为拼花文件时,火花SQL可以方便的执行所有的操作。
修改配置项<代码> spark.sql.sources.default> 代码,可修改默认数据源格式。
<代码类=" language-scala "> scala>val df=spark.read.load (“hdfs://hadoop001:9000/namesAndAges.parquet”) df: org.apache.spark.sql。DataFrame=(年龄:长整型数字,名字:字符串) scala>df.select(“名字”).write.save (names.parquet) 代码>
当数据源格式不是铺格式文件时,需要手动指定数据源的格式。数据源格式需要指定全名(例如:<代码> org.apache.spark.sql。拼花> 代码),如果数据源格式为内置格式,则只需要指定简称json、拼花、jdbc、兽人,libsvm、csv、文本来指定数据的格式。
可以通过SparkSession提供的read.load方法用于通用加载数据,使用写和保存保存数据。
<代码类=" language-scala "> scala>val peopleDF=spark.read.format (json) .load (“hdfs://hadoop001:9000/people.json”) peopleDF: org.apache.spark.sql。DataFrame=(年龄:长整型数字,名字:字符串) scala>peopleDF.write.format(“铺”).save (“hdfs://hadoop001:9000/namesAndAges.parquet”) scala> 代码>
除此之外,可以直接运行SQL在文件上:
<代码类=" language-scala "> val sqlDF=火花。sql (“SELECT * FROM parquet. hdfs://hadoop001:9000/namesAndAges.parquet”) sqlDF.show() 代码>
文件保存选项
可以采用SaveMode执行存储操作,SaveMode定义了对数据的处理模式。需要注意的是,这些保存模式不使用任何锁定,不是原子操作。此外,当使用覆盖方式执行时,在输出新数据之前原数据就已经被删除.SaveMode详细介绍如下表:
Scala/Java 任何语言 意义 SaveMode.ErrorIfExists(默认) “错误”(默认) 如果文件存在,则报的错 SaveMode.Append “添加” 追加 SaveMode.Overwrite “覆盖” 覆写 SaveMode.Ignore “忽略” 数据存在,则忽略镶花文件
铺读写
铺格式经常在Hadoop生态圈中被使用,它也支持火花SQL的全部数据类型.Spark SQL提供了直接读取和存储铺格式文件的方法。
<代码类=" language-scala ">//编码器自动为最常见的类型是由进口spark.implicits._提供 进口spark.implicits._ val peopleDF=spark.read.json(“例子/src/main/资源/people.json”)//DataFrames以拼花文件可以保存,维护模式信息 peopleDF.write.parquet (“hdfs://hadoop001:9000/people.parquet”)//读拼花前面创建的文件//检查机关文件是自描述的模式是保留//加载的结果文件也是一个DataFrame拼花 val parquetFileDF=spark.read.parquet (“hdfs://hadoop001:9000/people.parquet”)//检查机关文件也可以用来创建一个临时视图,然后在SQL语句中使用 parquetFileDF.createOrReplaceTempView (“parquetFile”) val namesDF=火花。sql(“选择的名字从parquetFile 13至19岁”) namesDF。地图(属性=比;”的名字:“+属性(0)),告诉()//+ - - - - - - - - - - - - +//| |值//+ - - - - - - - - - - - - +//|名称:贾斯汀|//+ - - - - - - - - - - - - + 代码>
解析分区信息
对表进行分区是对数据进行优化的方式之一。在分区的表内,数据通过分区列将数据存储在不同的目录下.Parquet数据源现在能够自动发现并解析分区信息,例如,对人口数据进行分区存储,分区列为性别和国家,使用下面的目录结构:
<代码类=" language-scala ">路径 └──来 └──表 ├──性别=男性 │├──…… ││ │├──国家=││└──data.parquet │├──国家=CN ││└──data.parquet │└──…… └──性别=女性 ├──…… │ ├──国家=│└──data.parquet ├──国家=CN │└──data.parquet └──…代码>
通过传递路径//表给SQLContext.read.parque
或SQLContext.read。负载,火花SQL将自动解析分区信息。
返回的DataFrame的模式如下: