环境: hadoop 1.2, python
有这样的数据,两列,中间是用\\t分隔的,需要按第二列从大到小的顺序排列。
02款雅阁 0.00611111111111
04款奥德赛 0.00813131313131
06ms201 0.000866666666667
06ms201图集 0.00704678362573
06雅阁 0.0145098039216
07常服大衣 0.00915032679739
08年本田思域 0.00111111111111
1.5d弯头 0.0211538461538
1.5匹空调 0.00929292929293
1.5米衣柜设计图 0.01640625
hadoop streaming的python程序写法如下:
hadoop streaming -input datain -output dataout -mapper cat -reducer cat -jobconf mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator -jobconf stream.num.map.output.key.fieds=2 -jobconf stream.map.output.field.separator=”\\t” -jobconf mapred.text.key.comparator.options=”-k2,2nr” -jobconf mapred.reduce.tasks=1
其中map, reduce都是操作系统命令cat,org.apache.hadoop.mapred.lib.KeyFieldBasedComparator 来自定义使用key中的部分字段做比较,stream.map.output.field.separator指定map出来的数据按\\t来分隔,stream.num.map.output.key.fieds是指map出来的数据的key/value分隔符在哪,这里将第一列和第二列都作为key部分,mapred.text.key.comparator.options指key中对比的方式, -k2, 2nr是指从第二列到第二列按数值反转排序。