我不确定“乱码”这个词是否正确。我的问题是这样的。我使用hadoop-streaming-0.20.2-cdh3u6.jar和python来编写mapreduce。命令如下:
hadoop jarhadoop-streaming-0.20.2-cdh3u6.jar \
-D mapred.reduce.tasks=0 \
-D mapred.job.priority=VERY_HIGH \
-files probability,rule_dict,dict \
-file "naive_bayes.py" \
-mapper "python naive_bayes.py" \
-input xxx \
-output xxx
概率,规则,dict,dict是我本地存储的目录,文件中包含中文单词。当我使用python读取这些文件时,会出现错误的“乱码”。一些文件片段:
石块 0.000025
最后 0.000321
老面孔 0.000012
GP17 0.000012
圈 0.000136
看个够 0.000062
布兰 0.000062
从这些文件中读到的是什么
PB�;��W�mVKZm����e�2��U�؎��"/�1_�u�8)i~�J�N86�l}[��y8�;%(K��/P��<��F/+����=��X�n�
有办法解决我的问题吗?
我已经上传了相同的python脚本和相同的目录到mapper机器,从命令行运行它,它运行良好,没有这个问题。
文件中的字是utf-8。
1条答案
按热度按时间5rgfhyps1#
我已经找到了问题的根本原因。当上传带有-files的目录时,hadoop会在同一个目录中创建.file\u name.crc文件,所以当我的代码迭代时文件也会处理.file\u name.crc,所以当对这些文件中的单词进行编码时会崩溃。