PySpark在运行show时抛出UnicodeEncodeError



我正在尝试读取一些镶木地板数据并显示前20行,这会引发以下异常:

UnicodeEncodeError: 'latin-1' codec can't encode character u'u2019' in position 2978: ordinal not in range(256)

我使用python连接器从Snowflake读取数据,并将其以拼花地板格式存储在HDFS上:

sf_cursor.execute(query)
results = sf_cursor.fetchall()
df = self.spark_sql_context.createDataFrame(results, DF_SCHEMA)

这是读取/显示代码:

input_df = spark_sql_context.read.parquet(input_path)
input_df.show(20)

从Snowflake读取数据时,找不到任何关于设置unicodeutf-8的信息,所以想知道是否有一种方法可以对某些列进行编码以克服这个问题。任何建议都将不胜感激。

感谢

根据niko的回答,这似乎是一个已知的问题,我现在必须做以下事情来解决:

decode_udf= udf(lambda val: val.encode('utf-8'), StringType())
input_df = input_df.withColumn('COLUMN_NAME', decode_udf('COLUMN_NAME'))

我们在从Snowflake到Pandas读取数据时发现了类似的问题,这可能与您的问题有关。

问题是:

  1. 源中的原始数据被转换并转储为Snowflake,具有Latin-1编码,但在转储时,它被强制转换为utf-8。出现了和你相同的错误。

  2. 一些可能需要预处理的特殊字符。

查找雪花转储之前的源数据编码。

Snowflake的贡献者在这里讨论了这一点,可能会帮助你:https://github.com/snowflakedb/snowflake-connector-python/issues/574

相关内容

  • 没有找到相关文章

最新更新