RDD、DataFrame、DataSet互转

本文详细介绍了如何在Spark中实现RDD与DataFrame及DataSet之间的转换。包括通过手动定义、反射和编程方式确定Schema,以及如何将DataFrame转换为DataSet等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果需要RDD与DS或者DF之间操作,那么都需要引入 import spark.implicits._  【spark不是包名,而是sparkSession对象的名称】

1、RDD 《-》 DataFrame

    1、RDD  -》  DataFrame (确定Schema)

a、直接手动确定:
         peopleRDD.map{x =>
val para = x.split(",")
(para(0), para(1).trim.toInt)
}.toDF("name","age")

       b、通过反射确定  (利用case class 的功能)
        case class People(name:String, age:Int)
        peopleRdd.map{ x => 
val para = x.split(",")
People(para(0),para(1).trim.toInt)
    }.toDF
     
       c、通过编程方式来确定
   1、准备Scheam 
            val schema = StructType( StructField("name",StringType):: StructField("age",IntegerType)::Nil )
            2、准备Data   【需要Row类型】
 val data = peopleRdd.map{ x => 
val para = x.split(",")
Row(para(0),para(1).trim.toInt)
     }
             3、生成DataFrame
 val dataFrame = spark.createDataFrame(data, schema)

   2、DataFrame -》 RDD
        dataFrame.rdd 即可, 返回的是 RDD[Row]


2、RDD 《-》 DataSet
    
    1、RDD -》  DataSet (case class 确定schema)
case class People(name:String, age:Int)
    peopleRDD.map{x =>
val para = x.split(",")
People(para(0), para(1).trim.toInt)
}.toDS

     2、DataSet -》 RDD

         dataSet.rdd 即可, 返回的是 RDD[People]
 
3、DataFrame 《-》 DataSet


    1、DataSet -》  DataFrame
dataSet.toDF  即可,直接复用case class的名称


2、DataFrame -》 DataSet  (Scheam需要借助case class) 【DF的列名要和 case class的列名一致。】
  case class People(name:String, age:Int)

  dataFrame.as[People]  即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值