使用 spark.read.csv
和 encoding='utf-8'
将带有外来字符 (åäö) 的数据帧加载到 Spark 中,并尝试执行一个简单的 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() 函数的上下文中应用 此处 提到的任何技巧。
原文由 salient 发布,翻译遵循 CC BY-SA 4.0 许可协议
https://issues.apache.org/jira/browse/SPARK-11772 讨论了这个问题并给出了一个运行的解决方案:
在运行
pyspark
之前。我不知道为什么上面的工作,因为sys.getdefaultencoding()
返回utf-8
对我来说即使没有它。如何在 Python 3 中设置 sys.stdout 编码? 还讨论了这一点并为 Python 3 提供了以下解决方案: