PySpark — UnicodeEncodeError: 'ascii' 编解码器无法编码字符

新手上路,请多包涵

使用 spark.read.csvencoding='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 许可协议

阅读 963
1 个回答

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)

原文由 Jussi Kujala 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题