Использование foreach с Spark RDD в python

Я пытаюсь взять очень большой RDD, работающий в кластере, и записать его в .csv. Он настолько велик, что .collect() ломается, поэтому вместо этого я хотел бы сохранить RDD по частям на каждом узле, а затем каким-то образом собрать их вместе, поскольку порядок не имеет значения. Моя идея состоит в том, чтобы использовать foreach с функцией принтера CSV, чтобы каждая часть записывала свои значения, а затем я мог бы собрать части вместе вручную, возможно, по FTP.

Я пользователь Spark с некоторым опытом, но на сегодняшний день мне никогда не удавалось заставить метод RDD foreach сделать что-нибудь полезное. Когда я пытаюсь запустить пример, приведенный в документации,

>>> def f(x): print x
>>> sc.parallelize([1, 2, 3, 4, 5]).foreach(f)

Я ничего не получаю обратно на свою консоль. Я считаю, что это связано с тем, что «печать» выполняется на отдельных узлах, а не на узле имени, где находится консоль. Однако в этом случае я действительно не вижу особого смысла в функции foreach!

Как я могу получить результаты моего возврата к узлу имени без предварительного вызова функции collect()?

NB. Я также открыт для использования RDD-функции saveAsTextFile(), но опять же мне не удалось заставить ее работать! Кажется, создается папка вместо текстового файла, хотя, возможно, это потому, что они существуют на каждом узле, а не централизованно?


person StackG    schedule 11.09.2014    source источник


Ответы (1)


Ответ здесь: Просмотреть содержимое RDD в Python Spark?

Заявленная причина заключается в том, что это не функция Python 2.6.

person Guillaume    schedule 18.11.2014