首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark Python map函数:编码utf-8时出错

Spark Python map函数:编码utf-8时出错
EN

Stack Overflow用户
提问于 2016-08-02 21:18:15
回答 1查看 3.7K关注 0票数 0

我一直在尝试用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函数工作得很好?

谢谢。下面是我的源代码。

代码语言:javascript
复制
> #!/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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-02 21:32:27

这里的编码没有什么特别的问题。你只是保存了一个错误的东西。如果你想保存一个合适的Unicode表示,你应该自己准备一个:

代码语言:javascript
复制
counts.map(lambda x: u"({0}, {1})".format(*x)).saveAsTextFile(...)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38721566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档