前言
创建DataFrame主要有三种方式:
- 从Spark数据源进行创建
- 从RDD进行转换
- 从Hive Table进行查询返回(后面讲述)
一、RDD 和 DataFrame之间的转换
准备测试RDD数据
scala> val rdd=sc.makeRDD(List("Mina,19","Andy,30","Michael,29"))
rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[10] at makeRDD at <console>:24
需要注意,只有import spark.implicits._之后,RDD才有toDF、toDS功能
scala> import spark.implicits._
import spark.implicits._
(1)RDD转换成DataFrame
1、toDF
scala> rdd.map{x=>val par=x.split(",");(par(0),par(1).toInt)}.toDF("name","age")
res3: org.apache.spark.sql.DataFrame = [name: string, age: int]
scala> res3.show
+-------+---+
| name|age|
+-------+---+
| Mina| 19|
| Andy| 30|
|Michael| 29|
+-------+---+
2、通过反射获取Scheam
SparkSQL能够自动将包含有case类的RDD转换成DataFrame,case类定义了table的结构,case类属性通过反射变成了表的列名。Case类可以包含诸如Seqs或者Array等复杂的结构。
scala> case class Person(name:String,age:Int)
defined class Person
scala> val