今天写了一个mapreduce程序,功能是根据query的pv次数,对pv进行排序。
但是写了三个小时,却都没有搞定。最后在同事Wuzhen的搞定下,才输出了正确结果。
总结一下原因。
1. 需要对输入进行转码。转码语句为:
String line = new String(value.getBytes(), 0, value.getLength(), "GBK");
2. 输出编码,需要指定。指定语句为:
job.setOutputFormatClass(GbkOutputFormat.class);
3. 注意OutputPath为目录。
当时我把输入路径设置如下,但是跑完代码,却发现文件大小总是为0,找了很久原因,才发现在query_sort.txt下面还有一个为part-00000的文件!!!!!!!!!
/user/webrank/luliujie/segmentation/query_sort.txt
4. 上面三个问题解决后。我发现输出只有query,没有pv次数。
这个时候,我发现发现原来,我在reduce的输出key为LongWritable,当把它通过下面语句,转为Text时,输出就正常了。
new Text(key.toString())。