说明
在 复杂的开发中,通过 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()
}
}