Spark RDD & DataFrame & Dataset 的相互转换

各自特点

RDD

Spark RDD

DataFrame

Spark DataFrame

DataSet

Spark DataSet

mark

导入隐式转换

// 创建 SparkSession 对象
val session = SparkSession.builder
          .master("local[*]")
          .appName("RDDto")
          .getOrCreate()

// 导入隐式转化
import session.implicits._

// Sparkcontext 对象
val sc = session.sparkContext

RDD 转换为其他

RDD

 val listRDD: RDD[(String, String, Int)] = sc.makeRDD(List(("1", "Bob", 12), ("2", "Bigdataboy", 16)))

转换为 DataFrame

toDF(字段名*)

// 转化为 DF
val RDDtoDF: DataFrame = listRDD.toDF("id", "name", "age")

转换为 DataSet

创建样例类

case class User(id: BigInt, name: String, age: Int)

转换

// 把每行数据加上 样例类
val UserRDD: RDD[User] = listRDD.map {
    case (id, name, age) => (User(id, name, age))
}
// 转化为 DS
val RDDtoDS: Dataset[User] = UserRDD.toDS()

DataFrame 转换为其他

文件

{"id":1,"name":"Bigdataboy","age": "18"}
{"id":2,"name":"Bob","age": "16"}
{"id":3,"name":"Black","age": "18"}

创建 DF

val jsonDF: DataFrame = session.read.json("indata/data.json")

转换为 RDD

val toRDD: RDD[Row] = jsonDF.rdd

转换为 DataSet

样例类

case class User(id: BigInt, name: String, age: Int)

转换,在 DF 基础上 加上 as[泛型]

val jsonToDS: Dataset[User] = jsonDF.as[User]

DataSet 转换为其他

样例类

case class User(id: BigInt, name: String, age: String)

创建 DS

val UserDS: Dataset[User] = List(User(1, "Bob", "12"), User(2, "Bigdata", "16")).toDS()

转换为 RDD

val UserRDD: RDD[User] = UserDS.rdd

转换为 DataFrame

val UserDF: DataFrame = UserDS.toDF()
发表评论 / Comment

用心评论~