我正在使用pyspark编写 binary 文件,但是内容与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^RE^Ò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写入操作进行收集和写入。
答案 0 :(得分:0)
Python将数据写入单个文件,而pyspark saveAsTextFile将数据写入单独的零件文件,其中零件文件的数量将直接等于spark执行者。
简单地说,spark涉及分布式存储和分布式(并行)处理。 Python不是。
但是,编写分布式文件并没有害处,因为它实际上也是一种有效的处理方式,因此与原始python相比,提高了速度。
如果要合并零件文件,则在HDFS情况下可以使用$ cat * > merged-file
或getmerge
命令。