spark3.0教程-SparkSQL:DataFrame转RDD

说明

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

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

案例

下面代码上接:spark3.0教程-SparkSQL:RDD转DataFrame

代码:

package rdd2dataframe

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

object DataFrame2Rdd {
  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 file: RDD[String] = sc.textFile("cdz.txt")

    //通过定义类格式化为dataframe
    val rowRDD: RDD[Cdz] = file.map(line=> {
      val arr: Array[String] = line.split(",")
      val startDate: java.sql.Timestamp = java.sql.Timestamp.valueOf(arr(3).trim)
      val endDate: java.sql.Timestamp = java.sql.Timestamp.valueOf(arr(4).trim)
      val row = Cdz(arr(0).trim, arr(1).toInt, arr(2).trim.toInt, startDate, endDate)
      row

    })
    //创建dataframe
    val df: DataFrame = spark.createDataFrame(rowRDD)
    // 将DataFrame转成 RDD,泛型是 Row
    val rdd: RDD[Row] = df.rdd
    rdd.foreach(println(_))
    spark.close()
  }
}

原文出处:/show_1IX4K3ZtyVI3.html