【问题标题】:UnicodeEncodeError: 'ascii' codec can't encode character errorUnicodeEncodeError:“ascii”编解码器无法编码字符错误
【发布时间】:2019-07-26 14:35:04
【问题描述】:

我正在使用 python 从谷歌云存储中读取一些文件

spark = SparkSession.builder.appName('aggs').getOrCreate()

df = spark.read.option("sep","\t").option("encoding", "UTF-8").csv('gs://path/', inferSchema=True, header=True,encoding='utf-8')
df.count()
df.show(10)

但是,我不断收到抱怨 df.show(10) 行的错误:

df.show(10)
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 
350, in show
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 162: ordinal not in range(128)

我搜索了一下,发现这似乎是一个常见错误,应该将解决方案添加到"UTF-8" 的编码中,就像我已经做的那样。由于这没有帮助,我仍然收到此错误,专家可以帮忙吗?提前致谢。

【问题讨论】:

  • 哪个python版本?
  • @frankegoesdown Python 2.7 版
  • # -*- coding: utf-8 -*- 将此字符串作为第一行添加到您的文件中
  • @frankegoesdown 我将该行添加到我的 py 的第一行,但仍然得到同样的错误。

标签: python csv apache-spark unicode pyspark


【解决方案1】:

在运行 Spark 作业之前导出 PYTHONIOENCODING 怎么样:

export PYTHONIOENCODING=utf8

对于 Python 3.7+,以下内容也应该可以解决问题:

sys.stdout.reconfigure(encoding='utf-8')

对于 Python 2.x,您可以使用以下内容:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

【讨论】:

  • 这应该可以。 df.show() 使用旧的 print 函数,它将尝试将输出数据编码为系统默认值,然后再将其传输到 stdout。确保在启动 python 解释器之前设置此环境变量。
  • @Giorgos Myrianthous。嗨,我进行了导出,并使用 sys.stdin.encoding 进行了检查; sys.stdout.encoing; sys.stderr.encoding,它们都输出“utf-8”。但是,我仍然遇到与以前相同的错误。也许我应该做更多?
  • @Kevin import sys reload(sys) sys.setdefaultencoding('utf-8') 怎么样?
猜你喜欢
  • 2019-09-01
  • 2015-10-21
  • 2010-12-11
  • 2012-07-02
  • 2010-12-11
  • 2021-09-28
  • 2017-02-01
相关资源
最近更新 更多