我一直在尝试用Python处理文本文件。我的文本文件是使用UTF-8的越南人的母语。在我使用map函数之后,输出似乎不符合格式。我已经将代码分离并一步一步输出。我注意到map:(word,1)之后的编码错误。更准确地说,直到output7.txt,文本是:Đứcđãngãgục
然而,在输出8处,编码出错:
(u'\u0110\u1ee9c',1) (u'\u0111\xe3',1) (u‘’g\xE3‘,1) (u'g\u1ee5c',1)
应该是(Đức,1) (đã,1) (ngã,1) (gục,1)
我试着修复这个bug已经5个小时了,但是没有发现任何真正有用的东西。谁能告诉我为什么Map函数破坏了一切,而类似的FlatMap函数工作得很好?
谢谢。下面是我的源代码。
> #!/usr/bin/python
# -*- coding: utf8 -*-
from pyspark import SparkContext, SparkConf
import os, sys
import codecs
conf =SparkConf().setAppName("wordcount").setMaster("local")
sc = SparkContext(conf=conf)
reload(sys)
sys.setdefaultencoding('utf-8')
text_file = sc.textFile("outputtest/*",use_unicode=False)
dict_file = sc.textFile("keyword");
text_file.saveAsTextFile("Output6.txt")
counts = text_file.flatMap(lambda line: line.split(" "))
counts.saveAsTextFile("Output7.txt")
counts = counts.map(lambda word: (word.decode("utf-8"), 1))
counts.saveAsTextFile("Output8.txt")
counts= counts.reduceByKey(lambda a, b: a + b)
dicts = dict_file.flatMap(lambda line: line.split(", ")) \
.map(lambda word: (word.replace("'","").replace(" ","_")))
keyword = dicts.join(counts);
counts.saveAsTextFile("Output9.txt")发布于 2016-08-02 21:32:27
这里的编码没有什么特别的问题。你只是保存了一个错误的东西。如果你想保存一个合适的Unicode表示,你应该自己准备一个:
counts.map(lambda x: u"({0}, {1})".format(*x)).saveAsTextFile(...)https://stackoverflow.com/questions/38721566
复制相似问题