zoukankan      html  css  js  c++  java
  • RDD、DataFrame与DataSet的相互转换

    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无法使用

    三者转换关系图:

    360截图20200128220135583

  • 相关阅读:
    ros论坛
    python--dict和set类型--4
    python--条件判断和循环--3
    python--list和tuple类型--2
    Unicode与UTF-8互转(C语言实现)
    spring mvc 返回JSON数据
    值得学习的C语言开源项目和库
    mudos源码分析
    Freemarker使用总结
    Maven详解
  • 原文地址:https://www.cnblogs.com/Gxiaobai/p/12239086.html
Copyright © 2011-2022 走看看