各自特点
RDD
DataFrame
DataSet
导入隐式转换
// 创建 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()
版权声明:《 Spark RDD & DataFrame & Dataset 的相互转换 》为明妃原创文章,转载请注明出处!
最后编辑:2020-2-21 09:02:21