Сохранение пары RDD в определенном формате в выходном файле

У меня есть JavaPairRDD, скажем, данные типа

<Integer,List<Integer>>

когда я делаю data.saveAsTextFile("output") Вывод будет содержать данные в следующем формате:

(1,[1,2,3,4])

так далее...

Я хочу что-то вроде этого в выходном файле:

1 1,2,3,4

i.e. 1\t1,2,3,4

Любая помощь будет оценена


person ashwinbhy    schedule 30.07.2017    source источник


Ответы (1)


Вы должны понимать, что здесь происходит. У вас есть RDD[T,U], где T и U - некоторые типы объектов, прочитайте его как RDD Tuple of T и U. В этом RDD, когда вы вызываете saveAsTextFile(), он по существу преобразует каждый элемент RDD в строку, поэтому текстовый файл генерируется как вывод .

Теперь, как объект некоторого типа T преобразуется в строку? Вызвав для него toString(). По этой причине у вас [] представляет список, а () представляет кортеж в целом.

Решение: сопоставьте каждый элемент в вашем RDD со строкой в ​​соответствии с вашим форматом. Я не очень хорошо знаком с синтаксисом Java, но со Scala я сделаю что-то вроде:

rdd.map(e=>s"${e._1}\t${e._2.mkString(",")}")

Где mkString объединяет коллекцию, используя некоторый разделитель.

Дайте мне знать, если это помогло. Ваше здоровье.

person Chitral Verma    schedule 30.07.2017
comment
Спасибо, я сделаю это - person ashwinbhy; 30.07.2017