在 Spark 中,有没有办法将 RDD 对象转换为案例对象



我是Spark编程的新手,我遇到了一个场景,我case class新手,我需要在我的RDD中使用case class

例如,我有一个tuplesRDD,例如:

Array[(String,String,String)] 

具有以下值:

Array((20254552,ATM,-5100), (20174649,ATM,5120)........)

有没有方法可以将上述RDD转换为:

20254552,trans(ATM,-5100)

trans在哪里是case class

是的。你绝对可以做到。以下代码应该可以帮助您做到这一点

val array = Array((20254552,"ATM",-5100), (20174649,"ATM",5120))
val rdd = sparkContext.parallelize(array)
val transedRdd = rdd.map(x => (x._1, trans(x._2, x._3)))

您应该在当前类之外创建case class

case class trans(atm : String, num: Int)

我希望它有所帮助

这不是

您问题的真正答案,但我建议您尽可能多地使用Dataframe s和Dataset s。使用它们将使您受益匪浅,例如提高编码效率,经过良好测试的框架字经过优化以使用更少的内存并充分利用火花引擎。

请参考 A Tale of Three Apache Spark API: RDD、DataFrames and Datasets,了解有关 RDDDataframeDataset 的差异和用例的更多信息

使用Dataset来解决您的问题非常简单:

import spark.implicits._
val ds = Seq((20254552,"ATM",-5100), (20174649,"ATM",5120)).toDS()
val transsedds = ds.map(x => (x._1, trans(x._2, x._3)))

正如@Ramesh所说,您应该在当前类之外创建案例类

case class trans(atm : String, num: Int)

希望对您有所帮助。

最新更新