用Python脚本解决Linux上MapReduce输出结果中的中文乱码问题

本文介绍了一种在Linux环境下解决MapReduce结果文件中中文乱码问题的方法。通过使用Python脚本及pydoop包,实现了从HDFS读取文件并对编码进行转换,最终解决了中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题介绍

Windows上跑出的结果中的中文显示没有问题,但是在Linux上由于编译环境问题却是中文乱码。

解决方案

利用Python脚本,快速完成编码转换。但是查找资料的过程比较艰辛,尝试了很多种办法都没能成功,最终用pydoop包对HDF上的MapReduce结果进行操作,解决问题。

import pydoop.hdfs as hdfs
import chardet

for info in hdfs.lsl("your path"):
        if info['path'][-1] == 'S': #_SUCCESS文件排除
                continue
        try:
                with hdfs.open(info['path'][12:],'r') as fi:
                        content = fi.read()
                        se = chardet.detect(content)['encoding']
                        print se
                        #用'GB18030'格式,经查找资料,包含字符个数GB2312 < GBK < GB18030,避免了前两种会报错的问题
                        content = content.decode("GB18030").encode("UTF-8")
                        hdfs.dump(content, info['path'][12:])
        except IOError as err:
                print("I/O error:{0}".format(err))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值