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流那样控制输入,请问我应该怎么解决这个问题? 展开
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流那样控制输入,请问我应该怎么解决这个问题? 展开
1个回答
展开全部
1、hadoop内部默认的文本读取编码设置为utf-8,你的源文件为gbk,在读取时遇到中文时是肯定要出现乱码。
解决方法有二:
(1)将你的GBK编码的文件在生成时,统一成utf-8,这是最好的方式,方便国际化。
(2)重写一个你的hadoop读文件的FileInputFormat对象,在其中进行传相应的编码值与编码转换的工作,这个是比较麻烦,实际当中用得很少。
再思考下。
解决方法有二:
(1)将你的GBK编码的文件在生成时,统一成utf-8,这是最好的方式,方便国际化。
(2)重写一个你的hadoop读文件的FileInputFormat对象,在其中进行传相应的编码值与编码转换的工作,这个是比较麻烦,实际当中用得很少。
再思考下。
追问
好的,看来GBK转UTF-8后再处理是最好的方案了。
本身HIVE输出的文件就是UTF-8的,为了节约硬盘转成GBK了,所以HADOOP处理的时候,最好还是再转成UTF-8。。。
追答
恩,是的,统一转变为UTF-8是主流的解决方法,试下看吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询