【发布时间】:2016-10-06 16:07:15
【问题描述】:
我收到编码错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 3: ordinal not in range(128)
在以下python(pyspark)代码中,其中row是数据框行:
def rowToLine(row):
line = str(row[0]).strip()
columnNum = 44
for k in xrange(1, columnNum):
line = line + "\t"
line = line + str(row[k]).strip() # encoding error here
return line
我也尝试了下面的加入:
def rowToLine(row):
s = "\t"
return s.join(row)
但是该行的某些值是 int,所以我得到了错误:
TypeError: sequence item 19: expected string or Unicode, int found
有谁知道如何解决这个问题?谢谢!
【问题讨论】:
-
@Keven,我调查了你提到的问题,但我不清楚如何在不使用 str 的情况下将 row[k] 转换为字符串。有什么建议吗?
-
没有足够的上下文来说明。你想输出 UTF-8 吗? ISO-8859-1?你的数据一开始是文本的吗?
-
旁注:您想使用
str.join()。它比你现在使用的代码有更好的性能。 -
"\t".join([ x.encode("utf-8") if isinstance(x, basestring) else x for x in row]) -
使用列表组合比使用生成器表达式更快,无论如何都会构建列表,因此在这里使用生成器根本没有优势