【发布时间】:2018-09-24 18:06:27
【问题描述】:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 261: ordinal not in range(128)
以上是我制作了一张新桌子后得到的。实际上我在下面使用了这个命令; table3 = u' '.join((table1, table2)).encode('utf-8').strip()
但它不起作用,我将把我的代码和真正的输出用于每个 RDD。
创建第一个 RDD 的代码
table1=sc.textFile('inventory').map(lambda line:next(csv.reader([line]))).map(lambda fields:((fields[0],fields[8],fields[10]),1))
第一个 RDD 实际输出
[(('BibNum', 'ItemCollection', 'ItemLocation'), 1),
(('3011076', 'ncrdr', 'qna'), 1),
(('2248846', 'nycomic', 'lcy'), 1)]
创建第二个 RDD 的代码
table2=sc.textFile('checkouts').map(lambda line:next(csv.reader([line]))).map(lambda fields:((fields[0],fields[3],fields[5]),1))
第二个RDD实际输出
[(('BibNum', 'ItemCollection', 'CheckoutDateTime'), 1),
(('1842225', 'namys', '05/23/2005 03:20:00 PM'), 1),
(('1928264', 'ncpic', '12/14/2005 05:56:00 PM'), 1),
(('1982511', 'ncvidnf', '08/11/2005 01:52:00 PM'), 1),
(('2026467', 'nacd', '10/19/2005 07:47:00 PM'), 1)]
最后,我尝试使用以下代码 table3 = u' '.join((table1, table2)).encode('utf-8').strip() 来连接 table1 和 table2。但它没有用。如果您对此错误有任何想法,请赐教。
【问题讨论】:
-
您的文本文件中似乎存在编码问题...
-
即使我能够从每个 RDD 中获取值,但它对于文本文件可能有问题吗?有什么办法可以解决吗?我想加入每张桌子。
-
@user8371915 我使用了普通的连接语法,但它发生了同样的错误,所以这就是我尝试上述语法的原因。
-
u' '.join((table1, table2)).encode('utf-8').strip()- 不是join语法。它是与 Sparkjoins无关的随机代码,除了名称。如果您的代码无论如何都失败了,那么显然错误不在这里。最好的猜测是在csv.reader([line])中,因为csv阅读器不支持unicode。最后,如果您尝试按原样加入RDD,那么您没有阅读对 RDD 加入的期望。如果您希望有人能够回答这个问题,请以 minimal reproducible example 开头。
标签: python apache-spark unicode pyspark encode