spark3.0教程-SparkSQL:Dataset转RDD

说明

在 复杂的开发中,通过 SparkSQL 可以很方便查询分析,但可能还需要转成 RDD,然后在进行下一步的处理

通过 Dataset 的 .rdd,可以很方便的做转换,泛型是 Row 类型

案例

样例类

//定义样例类,封装数据
case class Cdz(id: String, eleNum: Integer, time:Integer, startTime: Timestamp, endTime: Timestamp)

主类

package rdd2dataframe

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.catalyst.ScalaReflection
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

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

    // 建立和Spark框架的连接
    val sparConf = new SparkConf().setMaster("local[*]").setAppName("sparkSQL")
    val sc = new SparkContext(sparConf)
    //创建SparkSession
    val spark: SparkSession = SparkSession.builder().config(sparConf).getOrCreate()

    // 读取文本文件,获取一行一行的数据
    val df: DataFrame = spark.read
      .option("header", "false") //默认为false,表示第一行不是表头
      .option("sep", ",") //列分隔符
      .schema(ScalaReflection.schemaFor[Cdz].dataType.asInstanceOf[StructType])
      .csv("cdz.txt") //读取文件

    import spark.implicits._
    val ds: Dataset[Cdz] = df.as[Cdz]

    // dataset 转 rdd
    val rdd: RDD[Cdz] = ds.rdd
    rdd.foreach(println(_))
    spark.close()
  }
}

原文出处:/show_1IX4K88IAX89.html