SparkSQL-概括
简介
SparkSQL是Spark整体架构用来处理结构化数据的模块,SparkSQL的接口为Spark提供了有关数据结构和执行信息,在内部,SparkSQL使用这些额外的信息来优化应用程序,SparkSQL有提供2种不同的数据抽象
- DataFrame
- DataSet
2种不同的数据抽象分别对应不同的API,有不同的但是类似的算子操作,另外SparkSQL还提供了SQL查询
DataSet & DataFrame
Dataset
一个Dataset也属于一个分布式弹性数据集,集成了RDD的优点[强类型、强大的lambda表达方式]、同时集成了DataFrame的结构Schema、Encode的优化,同时DataSet可以从JVM直接构建,支持使用map,filter,…等算子进行数据处理。
NOTE:在代码中,可以通过import spark.implicit._
将DataSet、DataFrame、RDD进行互相转换;
DataSetAPI在Scala和Java中是可用的,python虽然不支持DataSetApi,但是也可以使用很多类似的特性。
DataFrame
一个DataFrame也是一种特殊的DataSet,只是数据被组织成不同的分散的列(field_names),概念上可以将DataFrame理解成一个关系型数据库或者View视图,DataFrame可以从【结构化数据Json、CSV、Parquet】、Hive table、外部数据库Mysql等,或者现成的RDD构建。在Scala和Java中,DataFrame是一种简单的DataSet[ROW]。
DataFrame可以在Scala、Java、Python、R中应用
SQL Query
SparkSQL的SQL功能支持从View、HiveTable中查询数据
具体可以参考:http://spark.apache.org/docs/2.4.0/sql-data-sources-hive-tables.html
//spark.enableHiveSupport()
val spark: SparkSession = SparkSession.builder.config(conf).getOrCreate(0)
import spark.implicit._
//SQL查询
val dataframe: DataFrame = sparl.sql("select * from view")
//转化成DataSet
val dataset = dataframe.as[classOf[A]]