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