使用spark.read.csv将带有外来字符(åäö)的数据框加载到Spark中,并使用encoding =’utf-8’并尝试执行简单的show().
>>> df.show()
Traceback (most recent call last):
File "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() – 函数的上下文中.
最佳答案
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)