Pyspark - UnicodeEncodeError:'ascii'编解码器无法编码字符-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Pyspark - UnicodeEncodeError:'ascii'编解码器无法编码字符

2018-12-11 18:01:37 5668 1

在尝试将数据插入Oracle DB时,在运行以下程序时获得unicodeerror。

-- coding: utf-8 --

import unicodedata

from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark.sql.functions import udf
import sys
print(sys.getdefaultencoding())

u = 'abcdé'
a = 'Austròalia'
print(u)
print(a)

spark = SparkSession.builder.master("local") \

    .appName("Unicode_Error") \
    .getOrCreate()

sqlContext = SQLContext(spark)

l = [(340, 'India',1),(340, 'Canada',2),(341, u'abcdé',3),(340, 'Japan',4),(341, u'Austròalia',5),(341, 'China',6)]
df = sqlContext.createDataFrame(l, ['CUSTOMER_ID', 'COUNTRY', 'LINENUMBER'])
df.show()

data_tuples = [tuple(x) for x in df.rdd.collect()]

print(str(data_tuples))

print(type(data_tuples))

query = "INSERT INTO CUSTOMERS VALUES (:1, :2, :3)"
cur = con.cursor()
cur.prepare(query)
cur.executemany(None, data_tuples)
con.commit()
cur.close()
con.close()
在设置PYTHONIOENCODING=utf8之前设置了Spark作业,解决了dataframe.show()的问题。并且还# -- coding: utf-8 --帮助解决了python打印语句。

虽然现在我甚至在数据帧正确显示数据后出现错误。将数据框转换为列表是问题倾向于发生的地方,请您指出还需要做些什么。

ascii
abcdé

Austròalia
CUSTOMER_ID COUNTRY LINENUMBER
340 India 1
340 Canada 2
341 abcdé 3
340 Japan 4
341 Austròalia 5
341 China 6

[(340, u'India', 1), (340, u'Canada', 2), (341, u'abcdxe9', 3), (340, u'Japan', 4), (341, u'Austrxf2alia', 5), (341, u'China', 6)]

Traceback (most recent call last): cur.executemany(None, data_tuples)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in
position 4: ordinal not in range(128)

元组列表有unicode数据,并且encode不能使用unicode数据,但打印出元组列表中的每个元素给了我确切的输出,如下所示

[('340', "u'India'", '1'), ('340', "u'Canada'", '2'), ('341', "u'abcd\xe9'", '3'), ('340', "u'Japan'", '4'), ('341', "u'Austr\xf2alia'", '5'), ('341', "u'China'", '6')]


India
340
India
1
340
Canada
2
341
abcdé
3
340
Japan
4
341
Austròalia
5
341
China
6

取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:19:57

    这是通过在通过cx_Oracle连接到Oracle时传递其他参数来解决的。

    设置python环境的编码方法以支持Unicode数据处理

    -- coding: utf-8 --

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    在cx_Oracle连接中提供编码属性

    con = cx_Oracle.connect(connection_string, encoding = "UTF-8", nencoding = "UTF-8")

    0 0
相关问答

1

回答

Java当中如何用String类和Scanner类结合来判断录入的值是否为特定类型呀?

2022-04-02 23:55:26 369浏览量 回答数 1

1

回答

【RDS】使用JDBC访问PPAS提示“syntax error at end of input"?

2022-01-13 13:11:22 601浏览量 回答数 1

1

回答

Django 2.2.x 之后的版本中用于正则路径的路由字符是什么呢?

2021-11-15 19:02:08 127浏览量 回答数 1

1

回答

python中UnicodeEncodeError字符是什么意思呢?

2021-11-06 20:16:34 180浏览量 回答数 1

1

回答

python 中ascii、unicode、utf-8、gbk 区别是什么?

2021-11-04 20:06:30 176浏览量 回答数 1

1

回答

用户反馈 Feedback iOS SDK:APPLE 审核被拒,原因为 Guideline 2.5

2020-03-27 21:48:50 572浏览量 回答数 1

1

回答

框架工程项目-Ascii、GBK、UTF、Unicode

2019-12-16 21:37:20 623浏览量 回答数 1

1

回答

spring发布dubbo时报错For input string

2019-11-04 14:54:48 1194浏览量 回答数 1

1

回答

搭建 openfire成功后spark可以登录 用spark无法注册

2016-10-28 02:57:00 3678浏览量 回答数 1

1

回答

rds for ppas 是否支持oracle 的AMERICAN_AMERICA.US7ASCII字符集

2016-01-05 15:30:10 4522浏览量 回答数 1
+关注
社区小助手
社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载