Spark SQL所使用的数据抽象并非RDD,而是DataFrame。DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,它不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能。Spark能够轻松实现从Mysql到DataFrame的转化,并且支持SQL查询。
Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLCOntext及HiveContext接口,来实现对其数据加载、转换、处理等功能。SparkSession实现了SQLContext及HiveContext所有功能。
Sparksession支持从不同的数据源加载数据,以及把数据转换成DataFrame,并且支持把DataFrame转换成SQLContext自身的表,然后使用SQL语句来操作数据。
一、RDD 转换成 DataFrame
Spark支持两种方法实现从RDD转换成DataFrame。第一种方法是,利用反射来推断包含特定类型对象的RDD的schema,适用对已知数据结构的RDD转换;第二种方法是,使用编程接口,构造一个schema并将其应用在已知的RDD上。
反射机制
|
|
运用编程接口
|
|
二、DataFrame常用操作
|
|
三、读取与保存
读取
|
|
保存
|
|
四、用户自定义函数
虽然spark.sql.function中已包含大量常用函数,但总有一些特定场景无法满足,这就需要使用udf,一个基本udf创建的流程如下:
|
|
最简单的就是通过lambda函数,不需要定义返回值类型,可以直接使用
|
|
以上两例是在dataframe中使用,也可以在spark.sql中使用:
|
|