gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:12:44 25 4
gpt4 key购买 nike

我正在尝试将多个案例类的数据框转换为这些多个案例类的 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]将数据表示为 Row使用 Spark SQL, DataFrames and Datasets Guide 中描述的映射的对象任何电话 getAs应该使用这个映射。

对于第二列,即struct<a: string, b: string> , 这将是一个 Row还有:

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

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

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

关于scala - 将 Dataframe 转换回 Spark 中案例类的 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833185/

25 4 0