栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SparkSQL(二)——RDD DF DS 相互转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SparkSQL(二)——RDD DF DS 相互转换

package com.zch.spark.sql.exercise

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


object SparkSQL_Exercise_Demo04 {
  def main(args: Array[String]): Unit = {
    val spark = new SparkSession.Builder()
      .appName("demo04")
      .master("local[2]")
      .getOrCreate()

    // 导入SparkSession中隐式转换的包
    import spark.implicits._

    // 获取sc对象
    val sc = spark.sparkContext

    // 创建DF
    //    val df1 = spark.read.format("  ").load("")

    // 创建RDD
    val rdd1:RDD[(String,Int,Double)] = sc.makeRDD(List(
      ("amos", 18, 1.25),
      ("tom", 28, 125.0),
      ("jerry", 20, 3000.0)
    ))

    // 将RDD转为DF
    //  先将RDD转换为多元组作为泛型的RDD
    //  rdd.toDF(列名)
    val df = rdd1.toDF("name", "age", "salary")
    df.show()

    // DF转为RDD
    val rdd2:RDD[Row] = df.rdd
    rdd2.map(x =>{
      (x.get(0),x.get(1),x.get(2))
    })
      .foreach(println)

    // RDD转为DS
    // 一般情况下,创建案例类,并将RDD中的数据转换为案例类作为泛型
    // 将对象的属性作为表中的字段
    // 属性名就是字段名
    // 属性类型就是字段的类型
    // 由于使用类与表对象,不存在类型安全的问题
    val rdd3 = rdd1.map(x => {
      Person(x._1, x._2, x._3)
    })

    val ds:Dataset[Person] = rdd3.toDS()
    ds.createTempView("t_person")
    spark.sql("""select * from t_person""")
      .show()

    // DS 转 RDD
    val rdd4 = ds.rdd
    rdd4.map(x => {
      (x.name,x.age,x.salary)
    })
      .foreach(println)

    // DF 转 DS
    // type Dataframe = Dataset[Row]
    // Dataset[Person]    =  Dataframe[Row].as[Person]
    // 将Row映射为Person
    val ds1:Dataset[Person] = df.as[Person]

    // DS转DF
    // Dataset[Row] = Dataset[Person].toDF()
    // 本质是将案例类解析为Row
    val df1:Dataframe = ds1.toDF()

  }

}

case class Person(name:String,age:Int,salary:Double){}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号