RDD的生成
- 使用parallelize/makeRDD算子从集合转换而来,常用于测试
- 使用类似textFile()这样的算子从文件系统读取数据形成RDD
- 使用transformation算子转换而来
DataFrame的生成
- 直接读取文件系统数据形成
spark.read.format.load()
- RDD转换而来
- DataSet转换而来
DataSet的生成
- 直接读取文件系统数据形成
val ds = spark.read.textFile()
- DataFrame转换而来
- RDD转换而来
RDD和DataFrame的转换
RDD转DataFrame
- 使用toDF的方式(需要导入隐式转换 import spark.implicits._)
peopleRDD.map(x => {
(x._1, x,_2)
}).toDF("name", "age")
peopleRDD.map(x => {
Person(x._1, x._2)
})
case class Person(name: String, age: Int)
- 构造Schema
val schema = StructType(Array(
StructField("name", StringType),
StructField("age", IntegerType)
))
val rowRDD = peopleRDD.map(_.split(","))
.map(attributes => Row(attributes(0), attributes(1).trim.toInt))
val peopleDF = spark.createDataFrame(rowRDD, schema)
DataFrame转RDD
personDF.rdd.map(x => {
val name = x.getString(0)
val age = x.getInt(1)
(name, age)
})
RDD和DataSet的转换
RDD转DataSet
- 使用toDS()算子,需要导入隐式转换
schema参考RDD转DataFrame的方法(schema信息不可以通过toDS直接传入) - 使用spark.createDataSet(rdd)的方式
DataSet转RDD
ds.rdd
DataFrame与DataSet的转换
DataFrame转DataSet
df.as[xxx]
case class xxx()
DataSet转DataFrame
ds.toDF()