Spark-SQL
集成性
Spark SQL允许使用DataFream API进行Spark程序的结构化数据处理,支持Java、Scala、Python、R语言操作
统一数据源
Spark提供了多种数据源,比如,Hive、MySQL、JSON、Parquet、CSV等
集成Hive
SparkSQL支持HiveQL语法以及Hive UDF,也可以操作Hive数仓。
连通性
支持JDBC和ODBC的连接
Spark-SQL使用
DataFrame(重点)
是Spark基本的API,在Spark1.3推出后,得到广泛应用,主要针对于那些对Spark Core操作比较繁琐的代码,实现SQL语句的开发,同时Spark在推出DataFrame后,到spark1.6以后又推出了Spark的DataSet
DataFrame = Dataset[Row]
共性:
1、RDD、DataFrame、Dataset都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利;
2、三者都有惰性机制。在进行创建、转换时(如map方法),不会立即执行;只有在遇到Action时(如foreach) ,才会开始遍历运算。极端情况下,如果代码里面仅有创建、转换,但后面没有在Action中使用对应的结果,在执行时会被直接跳过;
3、三者都有partition的概念,进行缓存(cache)操作、还可以进行检查点(checkpoint)操作;
4、三者有许多相似的函数,如map、filter,排序等;
RDD转换DataFrame(重点)
为什么要转换?
其实我们可以想象一下,如果使用RDD读取HDFS数据过来,那么能用SQL直接操作,那就相当简单了,并且很符合大众化开发,同时DF执行效率要高于RDD的方式。
转换DF两种方式:1. 编程接口方式 2. 反射方式
使用的方式:首先创建DF,然后根据DF创建临时表,再去执行SQL语句
DataFrame的数据源(重点)
读取(Load):如果使用load的方式,那么不在任何的修改前提下,默认读取的是Parquet文件数据格式,想要修改读取的数据源,需要使用format方法,来改变读取数据源
存储(Save):使用Save的话,默认存储格式是Parquet格式,如果改变格式,需要使用format方法,同时也可以存储MySQL数据库