rdd dataframe dataset 相互转化

1、RDD <--> DataFrame

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

     2、通过反射确定  (利用case class 的功能)
        case class People(name:String, age:Int)
        peopleRdd.map{ x => 
        val para = x.split(",")
        People(para(0),para(1).trim.toInt)
         }.toDF
          
     3、通过编程方式来确定
        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)
DataFrame -> RDD
     dataFrame.rdd 即可, 返回的是 RDD[Row]
      rdd.map(x=>(x.get(0),x.get(1)))

2、RDD <-> DataSet

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

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]  即可。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容