RDD、DataFrame與DataSet三者有許多的共性,都有各自使用的場景,常常需要在三者之間進行轉換
DataFrame/Dataset 轉 RDD:
val rdd1=testDF.rdd
val rdd2=testDS.rdd
RDD 轉 DataFrame:
// 一般用元組把一行的數據寫在一起,然后在toDF中指定字段名
import spark.implicits._
val testDF = rdd.map {line=>
(line._1,line._2)
}.toDF("col1","col2")
RDD 轉 Dataet:
// 核心就是要定義case class
import spark.implicits._
case class Coltest(col1:String, col2:Int)
val testDS = rdd.map{line=>Coltest(line._1,line._2)}.toDS
DataSet 轉 DataFrame:
// 這個轉換簡單,只是把 case class 封裝成Row
import spark.implicits._
val testDF = testDS.toDF
DataFrame 轉 DataSet:
// 每一列的類型后,使用as方法(as方法后面還是跟的case class,這個是核心),轉成Dataset。
import spark.implicits._
case class Coltest … …
val testDS = testDF.as[Coltest]
特別注意:
在使用一些特殊操作時,一定要加上import spark.implicits._ 不然toDF、toDS無法使用

