Java-如何将Iterable转换为JavaPairRDD

时间:2020-01-08 18:20:51

标签: java scala apache-spark rdd spark-redis

我的JavaPairRDD为( String,Iterable [(String,String)] ),我希望将其转换为JavaPairRDD为( String,RDD [String,String < / strong>]),这样我就可以对内部JavaPairRDD使用reduceByKey函数。

在此示例中,我有一个JavaPairRDD,其中键是特定的型号,值是元组项目编号及其价格的Iterable。

以下是JavaPairRDD的示例:

("Model1", Iterable(("1234", "55.00"), ("5678", "52.50"), ("91011", "551.65"))
("Model2", Iterable(("6546", "55.00"), ("6798", "1255.05"), ("98797", "500.65"))

应用reduceByKey函数后,我希望结果看起来像这样:

("Model1", JavaPairRDD(("1234", "55.00"), ("5678", "52.50"), ("91011", "551.65"))
("Model2", JavaPairRDD(("6546", "55.00"), ("6798", "1255.05"), ("98797", "500.65"))

一个非常相似的线程使用以下Scala代码转换了该RDD: How to convert an Iterable to an RDD

("To", List(("Tom",50),("Tod","30"),("Tom",70),("Tod","25"),("Tod",15))
("Ja", List(("Jack",50),("James","30"),("Jane",70),("James","25"),("Jasper",15))
rdd.flatMap{case(key, list) => list.map(item => ((key,item._1), item._2))}
   .reduceByKey(_+_)
   .map{case((key,name),hours) => (key, List((name, hours)))}
   .reduceByKey(_++_)

在Java中有类似的方法吗?

感谢您的帮助。

0 个答案:

没有答案