我是Spark
计划的新手,我遇到了case class
的新手,我需要在我的case class
中使用RDD
:< / p>
例如,我有一个RDD
tuples
喜欢:
Array[(String,String,String)]
具有以下值:
Array((20254552,ATM,-5100), (20174649,ATM,5120)........)
是否有任何方法可将上述RDD
转换为:
20254552,trans(ATM,-5100)
其中trans
是case class
?
答案 0 :(得分:2)
是。绝对可以做到这一点。以下代码可以帮助您做到这一点
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)
我希望它有所帮助
答案 1 :(得分:2)
这不是您问题的真正答案,但我建议您尽可能使用Dataframe
和Dataset
。使用它们将使您受益匪浅,例如提高编码效率,经过良好测试的帧字,优化使用更少的内存并完全受益于火花引擎。
有关RDD
,Dataframe
和Dataset
s
使用Dataset
s解决问题的方法非常简单:
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)
希望它有所帮助。