gpt4 book ai didi

python - 在 pyspark 中关闭强制 UTF8 编码

转载 作者:行者123 更新时间:2023-12-03 17:29:24 26 4
gpt4 key购买 nike

我有一个像下面这样的 python 代码来使用 pyspark 从 Oracle 读取数据。

tableDF = spark.read \
.format("jdbc") \
.option("driver", "oracle.jdbc.driver.OracleDriver") \
.option("url", "jdbc:oracle:thin:@" + hostid + ".dev.com:1521/" + databaseinstance) \
.option("dbtable", sqlstring) \
.option("numPartitions", 1) \
.option("fetchsize", fetchsize) \
.option("user", contextname) \
.option("password", contextname) \
.load() \

数据库源字符集是 US7ASCII 但是由于没有对将数据加载到 Oracle 中的验证,它包含具有各种编码字符集的数据。 简而言之,即使 DB 字符集是 US7ASCII,它的列中也包含 UTF8、ISO-8859-1 混合编码的数据。

我能够成功地从 Oracle 将数据读取到数据帧中而没有任何问题,但是由于 pyspark 强制编码为 UTF-8,数据崩溃了,这导致我的一些数据具有 UTF-8 替换字符,例如 EFBFA2EFBE80EFBE93 由于在包含源字符集为 US7ASCII 的列中存在 Unicode 字符 E2 80 93,因此无法正确识别

该字段的类型是 varchar .存储值为 , en dash character .而不是字符,字节 0xE2 0x80 0x93返回,转换为 ??? .

调用 DUMP(NAME,'1016')在一行 NAME值(value)是
CLINIC – NORTH 

返回:

Typ=1 Len=69 CharacterSet=US7ASCII: 43,4f,52,41,20,e2,80,93,20,4e,4f,52,54,48,



因此,我希望简单地从 Oracle 读取数据,而不对我的数据进行任何编码。基本上,我不希望对正在检索的数据进行任何强制编码。我只是希望它们以存储在 Oracle 中的方式存储。

有没有办法通过pyspark将此默认编码关闭为UTF-8?
或者
如何让 JDBC 或 PYTHON 驱动程序以任何编码形式处理这些字符?

正如我已经提到的,因为我的数据库包含混合编码字符集,强制任何特定编码(如 UTF8/US-ASCII/ISO-8859-1)适用于某些数据,但不适用于其他数据,这就是为什么我需要一种不强制执行任何编码的方法全部。

任何帮助或指导将不胜感激。谢谢

最佳答案

我不确定我的想法是否适用于您的情况,但我尝试过:
.option("encoding", "US-ASCII")
这应该改变编码。

如果您使用例如 pyspark,另一个想法是全局设置编码:

import sys 
reload(sys) #reload seems to be important, otherwise next step can break
sys.setdefaultencoding('us-ascii')

关于python - 在 pyspark 中关闭强制 UTF8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57413569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com