Spark RDD与DataFrame相互转换

@羲凡——只为了更好的活着

Spark RDD与DataFrame相互转换

Q:Spark中RDD转成DataFrame用什么算子
A:.rdd
Q:Spark中DataFrame转成RDD用什么算子
A:.toDF

1.直接上代码
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, SparkSession}

object Demo{
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("Demo")
      .master("local[*]")
      .getOrCreate()

    val file="file:///D:\\data\\test.txt"
    val schema = StructType(Array(
      StructField("name",StringType), StructField("age",IntegerType)
    ))

    // DataFrame转换成RDD
    println("=========DataFrame转换成RDD=========")
    val dataFrame: DataFrame = spark
      .read
      .option("delimiter",",")
      .schema(schema)
      .csv(file)
    dataFrame.show()
    val rdd: RDD[(String, Int)] = dataFrame
      .rdd
      .map(t => (t.getAs[String](0),t.getAs[Int](1)))
    println("===转换后的结果如下===")
    rdd.foreach(println)

    // RDD转换成DataFrame
    println("=========RDD转换成DataFrame=========")
    import spark.implicits._
    val rdd2: RDD[(String, String)] = spark
      .sparkContext
      .textFile(file)
      .map(t=>{
        val arr = t.split(",")
        (arr(0),arr(1))
      })
    rdd2.foreach(println)
    val dataFrame2: DataFrame = rdd2
      .toDF("name","age")
    println("===转换后的结果如下===")
    dataFrame2.show()

    spark.stop()
  }
}
2.结果展示
=========DataFrame转换成RDD=========
+----+---+
|name|age|
+----+---+
|  扎克|227|
|  赵信|200|
|  魔腾|188|
+----+---+
===转换后的结果如下===
(扎克,227)
(赵信,200)
(魔腾,188)
=========RDD转换成DataFrame=========
(魔腾,188)
(扎克,227)
(赵信,200)
===转换后的结果如下===
+----+---+
|name|age|
+----+---+
|  扎克|227|
|  赵信|200|
|  魔腾|188|
+----+---+

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值