SparkRDD、SchemaRDD(dataFrame)和SparkSQL 之间的关系
普通数据--》SparkRDD-》SchemaRDD(dataFrame)-》sparkSQL
1. 普通数据的获取
首先我们要先获取到一些数据,有以下这些方法:
a) 导入本地的文件
这种方法我也不会用,但是有这种,我们一般用后面那几种
b) 导入hdfs文件
也可不写hdfs://python2:9050这些
c) 直接转换(普通数据)
2. 普通数据—》SparkRDD
获取到数据后,那么就将可以将它们转换成SparkRDD类型了,转换的方法目前知道的只有一种,那就是sc.parallelize(data),将数据转换成SparkRDD后,我们就可以使用sparkRDD的方法了,比如以下这些方法:
但这些方法对于大多数人来说还是太繁琐了,对于那些想用spark的人而又不会编程的人来说是望而却步,所以SparkSQL就因运而生了,只需要会MySQL操作就可以,但是SparkSQL是一种有数据结构的类型,而我们原生的SparkRDD是没有数据结构的,所以我们就得将SparkRDD装换成有结构的类型,这个类型就叫做DataFrame,也称之为SchemaRDD。
3. SparkRDD—》SchemaRDD(DataFrame)
产生的DataFrame有以下几种方法
1. 从已存在的RDD产生
a) 从行对象推出数据结构并安插到原RDD上形成SchemaRDD即DataFrame
使用createDataFrame:
或:
也可不用Row,如:
b) 用编程的方法产生数据结构并用在DataFrame生成函数的参数中以形成一SchemaRDD
使用toDF:
2. 读入json、parquet、AVRO或CSV文件时可以直接读成Schema即DataFrame,这是因为这些文件本身就是带有结 构的
这里演示了读入CSV文件:
3. 将python或R中的DataFrame转换成spark中的SchemaRDD
这个没有python数据,就不演示了,感兴趣的自己去看官方文档
我们将sparkRDD装换成dataFrame后,虽然不能用sparkSQL,但使用其方法看起来也比直接对sparkRDD操作看起来高大上一点,比如一些groupBy、count之类的方法。
列:
4. SchemaRDD(DataFrame)—》SparkSQL
实现SparkRDD:
1. 产生SchemaRDD—为了实现SparkSQL必须将一般的RDD装换成带数据结构的数据集DataFrame
2. SchemaRDD本身就是一个RDD,但它本身包含是由行对象(row object)组成。每个行对象代表一条记录
3. SchemaRDD提供了提供了一些新的操作应用函数使得数据操作和分析更高效和简洁
4. 可以将SchemaRDD注册成表,这样就可以用SQL访问RDD的数据了,而结果集本身就是SchemaRDD即DataFrame
5. 可以用各种方法生成SchemaRDD
总结了上面几条内容,发现要使用SparkSQL,就得将SchemaRDD注册成一个表,使用registerTempTable方法: