2017-05-21 97 views
0

我是新來的Spark編程和我遇到我的新手case class一個場景來了,我需要在我RDD s到使用case class火花,有沒有辦法轉換的RDD對象到對象來說

例如,我有tuples等的RDD

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

Array[(String,String,String)] 

具有值

是否有任何上述RDD轉換成方法:

20254552,trans(ATM,-5100) 

其中transcase class

回答

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) 

我希望它能幫助

+0

謝謝,Ramesh ... –

+0

我的榮幸@JitheshGopinathan。感謝您的支持和接受。 :) –

2

這不是你的問題的真正答案,但我建議儘可能使用Dataframe s和Dataset s。使用它們會使您受益匪淺,例如提高編碼效率,優化測試框架,從而充分利用更少的內存並從火花引擎中受益。

請參考A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets瞭解更多信息有關的差異,並且使用的RDD情況下,Dataframe S和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) 

希望它有幫助。

+0

好信息Haroun ...謝謝.. –

+0

我的榮幸@JitheshGopinathan,謝謝你upvoting我的答案 –

相關問題