2016-09-23 10 views
1

を使用して、外字(åäö)を含むデータフレームをencoding='utf-8'にロードし、簡単なshow()を実行しようとしています。PySpark - UnicodeEncodeError: 'ascii'コーデックは文字をエンコードできません

>>> df.show() 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/spark/python/pyspark/sql/dataframe.py", line 287, in show 
print(self._jdf.showString(n, truncate)) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 579: ordinal not in range(128) 

私は、これはおそらく、Pythonの自体に関連して理解が、私はhere for exampleに記載されているトリックのいずれかがPySparkとshow()のコンテキストで適用することができる方法を理解することはできません - 機能。

+0

'show'を使用している場合にのみ、あなたがこれを経験するのですか? – zero323

+0

@ zero323他にも印刷関連のコマンドがありますか? – salient

+0

まず、 'df.rdd.map(lambda x:x).count()'が成功すれば試してみることができます。 – zero323

答えて

5

https://issues.apache.org/jira/browse/SPARK-11772この問題について協議し、実行します解決できます:

export PYTHONIOENCODING=utf8 

pysparkを実行する前に。私はsys.getdefaultencoding()utf-8を返してくれたので、上記の理由がうまくいかないのだろうかと思います。

How to set sys.stdout encoding in Python 3?もこのことについて語っとPython 3のために、以下のソリューションを提供します:

import sys 
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1) 
+0

'spark-submit'でこれを試してみましたが動作しませんでした – prcastro

関連する問題