web-dev-qa-db-ja.com

PySpark — UnicodeEncodeError: 'ascii'コーデックは文字をエンコードできません

外部文字(åäö)を含むデータフレームをSparkを使用してspark.read.csvを使用し、encoding='utf-8'を使用して単純なshow()を実行しようとします。

>>> 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自体に関連していると思いますが、言及されているトリックのどれが ここでは例 がPySparkおよびshow()関数。

13
salient

https://issues.Apache.org/jira/browse/SPARK-11772 この問題について話し、実行するソリューションを提供します:

_export PYTHONIOENCODING=utf8
_

pysparkを実行する前。 sys.getdefaultencoding()がそれなしでも_utf-8_を返したので、なぜ上記が機能するのでしょうか。

Python 3? でsys.stdoutエンコーディングを設定する方法)もこれについて話し、Python 3の次のソリューションを提供します:

_import sys
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1)
_
16
Jussi Kujala
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

これは私にとってはうまくいきます。私は前もってエンコーディングを設定しており、スクリプト全体で有効です。

1