Sorting Hadoop MapReduce多列流式排序

Sorting Hadoop MapReduce多列流式排序,sorting,hadoop,Sorting,Hadoop,我的mapreduce输入如下所示: key1 \t 4.1 \t more ... key1 \t 10.3 \t more ... key2 \t 6.9 \t more ... key2 \t 3 \t more ... 我想先按第一列排序,然后按第二列排序(反向数字)。有没有办法实现这个流式MapReduce 我目前的尝试是: hadoop jar hadoop-streaming-1.2.1.jar -Dnum.key.fields.for.partition=1 -Dmapred.

我的mapreduce输入如下所示:

key1 \t 4.1 \t more ...
key1 \t 10.3 \t more ...
key2 \t 6.9 \t more ...
key2 \t 3 \t more ...
我想先按第一列排序,然后按第二列排序(反向数字)。有没有办法实现这个流式MapReduce

我目前的尝试是:

hadoop jar hadoop-streaming-1.2.1.jar -Dnum.key.fields.for.partition=1 -Dmapred.text.key.comparator.options='-k1,2rn' -Dmapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator -mapper cat -reducer cat -file mr_base.py -file common.py -file mr_sort_combiner.py -input mr_combiner/2013_12_09__05_47_21/part-* -output mr_sort_combiner/2013_12_09__07_15_59/
但它按键的第一部分和第二部分进行排序(但第二部分不是按数字排序,而是按字符串排序)


关于如何对两个字段(一个数字字段和一个文本字段)进行排序,您有什么想法吗?

您可以通过在mapred.text.key.comparator.options中指定多个k选项来实现多列的数字排序(类似于linux sort命令)

e、 g.在巴什

sort -k1,1 -k2rn
你的例子是

hadoop jar hadoop-streaming-1.2.1.jar \
    -Dmapred.text.key.comparator.options='-k1,1 - k2rn' \
    -Dmapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
    -mapper cat \
    -reducer cat \
    -file mr_base.py \
    -file common.py \
    -file mr_sort_combiner.py \
    -input mr_combiner/2013_12_09__05_47_21/part-* \
    -output mr_sort_combiner/2013_12_09__07_15_59/

这对我在hadoop 2.7.3上不起作用。。。知道为什么吗?(我的确切配置是
-D mapreduce.partition.keycomarator.options='-k1,2-k3,3nr-k4,4nr'
,但它失败了)尝试显式指示您有多少列。例如,
-D stream.num.map.output.key.fields=4