Java - Как конвертировать Iterable в JavaPairRDD - PullRequest
0 голосов
/ 08 января 2020

У меня есть JavaPairRDD ( String, Iterable [(String, String)] * ), и я хочу, чтобы это было преобразовано в JavaPairRDD ( String, RDD [String, String ]), так что я могу использовать функцию reduByKey для внутреннего JavaPairRDD.

В этом примере у меня есть JavaPairRDD, где ключ - это заданный c номер модели, а значение - это Iterable из номеров элементов с кортежем и цена этого элемента.

Вот пример JavaPairRDD:

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

После применения функции reduByKey хотелось бы, чтобы результат выглядел следующим образом:

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

Очень похожий поток преобразовал этот RDD, используя следующий код Scala: Как преобразовать Iterable в 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?

Спасибо за вашу помощь.

...