繁体   English   中英

在 Spark 中将 Dataframe 转换回案例类的 RDD

[英]Convert Dataframe back to RDD of case class in Spark

我正在尝试将多个案例类的数据框转换为这些多个案例类的 rdd。 我找不到任何解决方案。 这个wrappedArray让我发疯了:P

例如,假设我有以下内容:

case class randomClass(a:String,b: Double)
case class randomClass2(a:String,b: Seq[randomClass])
case class randomClass3(a:String,b:String)

val anRDD = sc.parallelize(Seq(
 (randomClass2("a",Seq(randomClass("a1",1.1),randomClass("a2",1.1))),randomClass3("aa","aaa")),
 (randomClass2("b",Seq(randomClass("b1",1.2),randomClass("b2",1.2))),randomClass3("bb","bbb")),
 (randomClass2("c",Seq(randomClass("c1",3.2),randomClass("c2",1.2))),randomClass3("cc","Ccc"))))

val aDF = anRDD.toDF()

假设我有aDF ,我怎么能得到anRDD ???

我试过这样的事情只是为了得到第二列,但它给出了一个错误:

aDF.map { case r:Row => r.getAs[randomClass3]("_2")}

您可以使用Dataset[randomClass3]间接转换:

aDF.select($"_2.*").as[randomClass3].rdd

Spark DatataFrame / Dataset[Row]使用Spark SQL、DataFrames 和数据集指南中描述的映射将数据表示为Row对象。任何对getAs调用都应使用此映射。

对于第二列,即struct<a: string, b: string> ,它也将是一个Row

aDF.rdd.map { _.getAs[Row]("_2") }

正如Tzach Zohar评论的那样,要取回完整的 RDD,您需要:

aDF.as[(randomClass2, randomClass3)].rdd 

我不知道 scala API 但你考虑过rdd 值吗?

也许是这样的:

aDR.rdd.map { case r:Row => r.getAs[randomClass3]("_2")}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM