Fork me on GitHub

SparkSQL RDD与DataFrame与Dataset相互转化

  在使用一些特殊的操作时,一定要加上 import spark.implicits._ 不然toDF、toDS无法使用

RDD 与 DataFrame

1).DataFrame -> RDD
  dataDF.rdd 注意输出:Array([Michael,29], [Andy,30], [Justin,19])

2).RDD -> DataFrame

1
2
3
4
5
6
7
8
9
10
11
// 1
  dd.map(para=>(para(0).trim(),para(1).trim().toInt)).toDF("name","age")
// 2.通过反射来设置
rdd.map(attributes => Person(attributes(0), attributes(1).trim.toInt)).toDF()
// 3.通过编程方式来设置Schema,适合于编译期不能确定列的情况
schemaString.map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)
val rdd[Row] = rdd.map(attributes => Row(attributes(0), attributes(1).trim))
val peopeDF = spark.createDataFrame(rdd[Row],schema)

RDD 与 DataSet

1).RDD -> DataSet
  rdd.map(para=> Person(para(0).trim(),para(1).trim().toInt)).toDS

2).DataSet -> RDD
  dataDS.rdd 注意输出: Array(Person(Michael,29), Person(Andy,30), Person(Justin,19))

DataFrame 与 DataSet

1).DataFrame -> DataSet
  val testDS = testDF.as[Person]

2).DataSet -> DataFrame
  val testDF = testDS.toDF

-----------------本文结束,感谢您的阅读-----------------