【发布时间】:2016-08-02 13:18:15
【问题描述】:
我一直在尝试使用 Python 处理文本文件。我的文本文件是使用 UTF-8 的越南人的母语。使用 map 功能后,输出似乎格式不正确。我已经将代码分开并逐步输出。我注意到在 map word: (word, 1) 之后编码出错了。更准确地说,直到 output7.txt,文本是: Đức đã 恩甘 gục
但是,在输出 8 处,编码出错了:
(u'\u0110\u1ee9c', 1) (u'\u0111\xe3', 1) (u'ng\xe3', 1) (u'g\u1ee5c', 1)
应该是 (Đức, 1) (đã, 1) (ngã, 1) (gục, 1)
我已尝试修复此错误 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")
【问题讨论】:
标签: python python-2.7 apache-spark encoding utf-8