2015-06-22 4 views
0

У меня есть RDD формыИзвлечение элементов из списка в пределах РДУ

RDD[(String, String, String)] 

я применяю функцию, которая извлекает данные из третьего элемента и создает РДД формы

RDD[(String, String, List[String])] 

Я хотел бы создать окончательный RDD, где каждый элемент списка сопоставляется с первыми двумя элементами. Что-то вроде,

RDD[(String, String, String)] = RDD[(String, String, List[String])].map(case(x, y, z) => (x, y, z._1), (x, y, z._2), ....)) 

Есть ли простой способ сделать это?

+0

Приведите пример ввода и вывода. Это не очень полезно. Кроме того, z в вашем примере представляет список String, поэтому не может иметь _1, _2 доступ к элементам. Вам просто нужны первые два элемента вместе с каждым элементом List [String] –

ответ

2

Я считаю, что это должен делать то, что вы ищете

val newRDD = listRDD.flatMap{case(x, y, z) => z.map((x,y,_))} 
-1

Кажется, что вы ищете flatMap или flatMapValues ​​(в зависимости от трансформации):

def flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U] 

flatMap: Возвращают новый RDD от первого применения функции ко всем элементам этого РД, а затем уплощение результатов ,

def flatMapValues[U](f: (V) ⇒ TraversableOnce[U]): RDD[(K, U)] 

flatMapValues: Pass каждое значение в паре ключ-значение РДД с помощью функции flatMap, не меняя клавиши; это также сохраняет исходное разделение RDD.

+0

Это не ответ на вопрос. Это может сделать хороший комментарий, хотя –

+0

@Paul Он соответствует уровню детализации, заданному в вопросе. Предлагаемые функции позволяют сделать «общее» преобразование, требуемое вопросом. – jruizaranguren

+0

Тогда ответ должен просить разъяснений, я думаю, не дать какой-то общий ответ о flatMap. –

Смежные вопросы