2017-02-20 17 views
1

Прямо сейчас у меня есть RDD в следующем форматеКак преобразовать RDD like ((int, int), int) в 3 пары ключ-значение в одной функции карты в искрах?

((int, int), int) 

, и я стараюсь, чтобы преобразовать его в 3-х пар ключ-значение, как (Int, 1).

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

также используя случай я могу создать список ((междунар, 1), (int, 1), (int, 1)), но как я могу сгенерировать List of (int, 1)?

ответ

2

Может быть, вы хотите flatMap?

rdd.flatMap { case ((x, y), z) => List((x, 1), (y, 1), (z, 1)) } 

Приведенные выше код производит RDD[(Int, Int)], расширяет каждый из вложенных кортежей в вашем РДУ на три отдельные элементы RDD.

+0

Это работает! Спасибо! – C0deZ

1

Это не должно занять три функции карты, но одну функцию карты, как показано ниже

inputRDD.map({case ((x,y),z) => ((x,1),(y,1),(z,1))}) 
+0

Правильно, это то, что я сначала придумал, но мне нужно сгенерировать список ((int, 1)), а не список (((int, 1), (int, 1), (int, 1))) – C0deZ