外部文字(åäö)を含むデータフレームを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()関数。
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)
_
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
これは私にとってはうまくいきます。私は前もってエンコーディングを設定しており、スクリプト全体で有効です。