在apache管道二进制数据火花火花

时间:2017-10-16 00:05:58

标签: apache-spark pyspark

所以我有一个RDD的二进制数据,我使用

创建它
line = sc.binaryFiles("files/Videos",10)
line.map(lambda x:x[1]).pipe("cat").take(1)

我想将此数据传输到外部程序,但是我收到以下错误

> Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 723, in pipe_objs
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 43: ordinal not in range(128)

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您没有向我们展示您如何将数据传递给外部程序,但您可能需要以下内容:

f.write(line.encode('utf8'))

您可能希望io.open()使用合适的f为您创建该文件句柄encoding=,例如'utf8'。

请考虑从python2升级到python3 - 您将获得有关何时缺少编码或解码的更清晰的诊断信息。