Spark_Scala-累积-RDD-DataSet-DataFrame-相互转换

25 篇文章 3 订阅
14 篇文章 0 订阅
本文探讨了Spark Scala中RDD、DataSet和DataFrame之间的转换。通过实例代码展示了如何直接将RDD转换为DataSet。
摘要由CSDN通过智能技术生成

Spark_Scala-累积-RDD-DataSet-DataFrame-相互转换

代码举例



import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

case class User(id:Int,name:String,age:Int)

object SparkSQL03_Transform {
  def main(args: Array[String]): Unit = {

    //创建配置对象
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL03_Transform")

    //环境对象
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

    //隐隐式转换规则
    import spark.implicits._

    //创建RDD
    val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1,"zhansgan",30),(2,"lisi",40),(3,"wangwu",79)))

    // to DF
    val df: DataFrame = rdd.toDF("id","name","age")

    // to DS
    val ds: Dataset[User] = df.as[User]

    // to DF
    val df1: DataFrame = ds.toDF()

    //转换为rdd
    val rdd1: RDD[Row] = df1.rdd

    rdd1.foreach(row=>{
      //获取数据时可以通过索引访问数据
      println(row.getString(1))
    })

    //释放资源
    spark.stop()
  }

}

/*
00/00/23 00:12:07 INFO CodeGenerator: Code generated in 11.185477 ms
zhansgan
lisi
wangwu
 */

rdd直接转换到dataset

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

/**
 * rdd直接转换到dataset
 */


/**
 * 样例类
 * @param id
 * @param name
 * @param age
 */

case class User1(id:Int,name:String,age:Int)

object SparkSQL03_Transform1 {
  def main(args: Array[String]): Unit = {

    //创建配置对象
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL03_Transform")

    //环境对象
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

    //隐隐式转换规则
    import spark.implicits._

    //创建RDD
    val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1,"zhansgan",30),(2,"lisi",40),(3,"wangwu",79)))

    //RDD 直接->DataSet
    val userRDD: RDD[User1] = rdd.map {
      case (id, name, age) => {
        User1(id, name, age)
      }
    }
    val userDS: Dataset[User1] = userRDD.toDS()

    //再转换为rdd输出一下
    val rdd1: RDD[User1] = userDS.rdd
    rdd1.foreach(println) //rdd这样输出 记住


    //释放资源
    spark.stop()
  }

}

/*
00/00/23 00:00:00 INFO Executor: Running task 1.0 in stage 0.0 (TID 1)
User1(3,wangwu,79)
User1(1,zhansgan,30)
User1(2,lisi,40)
 */




  时间一转眼就过去了三年,
  一切在我心开的好皎洁,
  现在倒计时也不剩几天,
  脚边的纸片,
  来不及去捡,
  仿佛是快要冲破压力的茧,
  离校后大家又各自熬夜,
  早上的黑眼圈,
  课上的小困倦,
  一天一天又一天,
  我只想拉住流年,
  好好的说声再见,
  遗憾感谢都回不去昨天,
  我只想铭记这瞬间,
  我们一起走过的光年,
  六月后,
  光年成记念,
  这个班级太骄傲,
  什么课都不发言,
  但是还是很温暖,
  同学之间的寒暄,
  压着课本抄作业,
  考试上的看一眼,
  现在想起来,
  会不会觉得很亲切,
  我只想拉住流年,
  好好的说声再见,
  遗憾感谢都回不去昨天,
  我只想铭记这瞬间,
  我们一起走过的光年,
  我只想拉住流年,
  好好的说声再见,
  在心中刻下你们的笑脸,
  看流星划过天边,
  许下我们的心愿,
  让现在成为永远,
  永远,
  永远,
  啦啦啦啦啦啦……
  
  
  雷雨心
  雷雨心,蒋思涵
  雷雨心
  彭飞,郑楠
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值