火花SQL常见4种数据源(详细)

  

通用负载/写方法

  

手动指定选项

  

火花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。拼花>   

可以通过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的模式如下:

火花SQL常见4种数据源(详细)