我有一个类似下面的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时没有进行验证,因此它包含具有各种编码字符集的数据。在nut shell中,即使DB charset是US7ASCII,它的列中也有UTF8、ISO-8859-1混合编码的数据。
我能够成功地将数据从Oracle读取到数据帧中,没有任何问题,但是由于pyspark强制编码到UTF-8,数据崩溃了,这导致我的一些数据具有UTF-8替换字符,如EFBFA2EFBE80EFBE93,由于包含US7ASCII源字符集的列中的Unicode字符E2 80 93
字段的类型是varchar
。存储的值是–
,即en dash character。返回的不是字符,而是0xE2 0x80 0x93
字节,这些字节被转换成???
。在
对NAME
值为的行调用DUMP(NAME,'1016')
退货:
Typ=1 Len=69 CharacterSet=US7ASCII: 43,4f,52,41,20,e2,80,93,20,4e,4f,52,54,48,
所以,我只想从Oracle中读取数据,而不需要对数据进行任何编码。基本上,我不想对正在检索的数据进行任何强制编码。我只想让它们像在甲骨文中那样存储。在
有没有办法关闭pyspark对UTF-8的默认编码? 或 如何让JDBC或PYTHON驱动程序以任何编码形式处理这些字符?在
正如我已经提到的,因为我的数据库包含混合编码字符集,强制执行任何特定的编码,如UTF8/US-ASCII/ISO-8859-1,对某些数据有效,但对其他数据无效,这就是为什么我需要一种完全不强制执行任何编码的方法。
任何帮助或指导将不胜感激。谢谢
我不确定我的想法对你是否有效,但我试过了:
.option("encoding", "US-ASCII")
这应该会改变编码方式。在
另一种方法是全局设置编码,如果使用pyspark:
相关问题 更多 >
编程相关推荐