hadoop读取GBK编码文件,中文乱码问题求助

输入文件是GBK编码的,mapper是这样的:publicvoidmap(LongWritablekey,Textvalue,OutputCollector<Text,T... 输入文件是GBK编码的,mapper是这样的:
public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
String str= value.toString();
System.out.println(str);

String str1 = new String(str.getBytes(),"GBK");
System.out.println(str1);
String str2 = new String(str1.getBytes("GBK"));

System.out.println(str2);

String str3 = new String(str.getBytes("GBK"));
System.out.println(str3);

String str4 = new String(str.getBytes(),"UTF-8");;
System.out.println(str4);
String str5 = new String(str4.getBytes("UTF-8"));;
System.out.println(str5);

String str6 = new String(str.getBytes("UTF-8"));
System.out.println(str6);

String str7 = new String(str.getBytes("UTF-8"),"GBK");
System.out.println(str7);

String str8= new String(str.getBytes("GBK"),"UTF-8");
System.out.println(str8);

output.collect(new Text(info[15]), new Text(str));
}
}

在查询个map输出记录的时候,所有输出字符都是乱码,其中main函数的输入是这样写的:
org.apache.hadoop.mapred.FileInputFormat.addInputPath(conf, new Path(dfs文件路径));
FileInputFormat 读文件时不能想IO流那样控制输入,请问我应该怎么解决这个问题?
展开
 我来答
erliang20088
2014-03-15 · TA获得超过2496个赞
知道小有建树答主
回答量:926
采纳率:100%
帮助的人:959万
展开全部
1、hadoop内部默认的文本读取编码设置为utf-8,你的源文件为gbk,在读取时遇到中文时是肯定要出现乱码。
解决方法有二:
(1)将你的GBK编码的文件在生成时,统一成utf-8,这是最好的方式,方便国际化。
(2)重写一个你的hadoop读文件的FileInputFormat对象,在其中进行传相应的编码值与编码转换的工作,这个是比较麻烦,实际当中用得很少。

再思考下。
追问
好的,看来GBK转UTF-8后再处理是最好的方案了。
本身HIVE输出的文件就是UTF-8的,为了节约硬盘转成GBK了,所以HADOOP处理的时候,最好还是再转成UTF-8。。。
追答
恩,是的,统一转变为UTF-8是主流的解决方法,试下看吧。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式