Содержимое, написанное PySpark saveAsTextFile отличается от того, что было написано python Write - PullRequest
0 голосов
/ 08 апреля 2019

Я использую pyspark для записи двоичных файлов, но содержимое отличается от того, что было написано в операции записи python.

pyspark saveAsTextFile:

rdd = sc.textFile(gidgid_output_dir+"/part-00000.snappy")\
        .map(lambda x: json.loads(x))\
        .map(lambda x:pack_data(x))\
        .filter(lambda x: x!=None)
rdd.saveAsTextFile(train_output_dir)

вывод:

^@^@^@^@^@^@^@^@*^A^@^@^@^@^@^@�^A�̆^Of$n?�^N�;�T����6}���<P=�s<8e>��X�w�^Pi5^N7MP�`Z,��qh�^^�!^P^ATD�K^R�E^�O<83>�/'��F¸z��6���^?�r^X�&���-C�^Zj����<P=�3�T����6=�^Pi5^N7M^P�`Z,��q(�^^�!^P^AT^D�q�C$^Q[�^@?��;^G��^@}d^E�E�5#���>

написать по python:

rdd = sc.textFile(gidgid_output_dir+"/part-00000.snappy")\
        .map(lambda x: json.loads(x))\
        .map(lambda x:pack_data(x))\
        .filter(lambda x: x!=None)\
        .collect()

s = "".join(rdd)
with open("out.txt", "w") as ofile:
    ofile.write(s)

выход:

^@^@^@^@^@^@^@^@*^A^@^@^@^@^@^@è^A<82>Ì<86>^Of$nò<89>´¡<94>^NÓ;ÂT<8b><85>ý<80>6}Âùæ<P=<8f>sÂ<8e><80><96>Xî<89>wÂ^Pi5^N7MPÂ`Z,<92>¬qhÂ^^ä!^P^ATDÂK^R­E^ÒOÂ<83>Ð/'»ºF¸z§¬6°<82>Â^?<8c>r^X<98>&­ÂÓ-Cì^Zj<8b>Âùæ<P=<8f>3ÅT<8b><85>ý<80

Те же входные данные, но другой результат, кажется, проблема с кодированием Как сделать содержимое, написанное с помощью saveAsTextFile, совместимым с содержимым, написанным python write.

Содержимое, написанное на python, - это то, что мне нужно в моей ситуации, и мне нужно спарк для параллельной обработки данных, мои данные слишком велики для сбора и записи с помощью операции записи на python .

1 Ответ

0 голосов
/ 08 апреля 2019

Python записывает данные в отдельный файл , тогда как pyspark saveAsTextFile записывает данные в виде отдельных файлов деталей , где количество файлов деталей будет напрямую равно искровым исполнителям.

Проще говоря, spark включает в себя распределенное хранение и распределенную (параллельную) обработку. Python нет.

Однако нет ничего плохого в написании распространяемых файлов, так как это действительно эффективный способ обработки, что повышает скорость по сравнению с необработанным питоном.

Incase, вы хотите объединить файлы деталей, вы можете использовать $ cat * > merged-file или getmerge команду incase из HDFS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...