Apache Spark:如何将Spark DataFrame转换为类型为RDD [(Type1,Type2,...)]的RDD?

eva*_*man 6 scala apache-spark

例如,假设我有DataFrame:

var myDF = sc.parallelize(Seq(("one",1),("two",2),("three",3))).toDF("a", "b")
Run Code Online (Sandbox Code Playgroud)

我可以将它转换为RDD[(String, Int)]带有地图的a:

var myRDD = myDF.map(r => (r(0).asInstanceOf[String], r(1).asInstanceOf[Int]))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一点,可能使用DF架构?

zer*_*323 10

使用模式匹配Row:

import org.apache.spark.sql.Row

myDF.map{case Row(a: String, b: Int) => (a, b)}
Run Code Online (Sandbox Code Playgroud)

在Spark 1.6+中,您可以使用Dataset如下:

myDF.as[(String, Int)].rdd
Run Code Online (Sandbox Code Playgroud)

  • 哦,'as`功能是完美的. (3认同)