我是Spark
编程的新手,我遇到了一个场景,我case class
新手,我需要在我的RDD
中使用case class
:
例如,我有一个tuples
的RDD
,例如:
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,了解有关 RDD
、Dataframe
和 Dataset
的差异和用例的更多信息
使用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)
希望对您有所帮助。