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