试图在HDInsight集群中使用希伯来字符UTF-8 TSV文件,在Linux上使用spark,我得到编码错误,有什么建议吗?
这是我的pyspark笔记本代码:
from pyspark.sql import *
# Create an RDD from sample data
transactionsText = sc.textFile("/people.txt")
header = transactionsText.first()
# Create a schema for our data
Entry = Row('id','name','age')
# Parse the data and create a schema
transactionsParts = transactionsText.filter(lambda x:x !=header) .map(lambda l: l.encode('utf-8').split("\t"))
transactions = transactionsParts.map(lambda p: Entry(str(p[0]),str(p[1]),int(p[2])))
# Infer the schema and create a table
transactionsTable = sqlContext.createDataFrame(transactions)
# SQL can be run over DataFrames that have been registered as a table.
results = sqlContext.sql("SELECT name FROM transactionsTempTable")
# The results of SQL queries are RDDs and support all the normal RDD operations.
names = results.map(lambda p: "name: " + p.name)
for name in names.collect():
print(name)
Error:
'ascii'编解码器无法编码位置6-11中的字符:序数不在范围内(128)回溯(最近一次调用最后一次):UnicodeEncodeError:'ascii'编解码器无法编码位置6-11中的字符:序数不是在范围内(128)
希伯来语文本文件内容:
id name age
1 גיא 37
2 maor 32
3 danny 55
When I try English file it works fine:
英文文本文件内容:
id name age
1 guy 37
2 maor 32
3 danny 55
Output:
name: guy
name: maor
name: danny
1 回答
如果您使用希伯来文本运行以下代码:
您会注意到您将名称作为
unicode
类型的列表:现在,我们将注册一个包含事务RDD的表:
您会注意到来自
sqlContext.sql(...
的PysparkDataFrame
中的所有字符串都是Pythonunicode
类型:现在运行:
将得到预期的结果:
请注意,如果您想对这些名称进行一些工作,您可能希望将它们用作
unicode
字符串 . 来自this article: