使用hadoop-streaming.jar和python随机排序

时间:2019-04-17 14:18:32

标签: java python hadoop mapreduce

我正在研究mapreduce范式。 我正在尝试使用python和java做经典的单词计数练习。在Java中,随机排序和排序后的化简器输入为

(key1, [value1, value 2, ... , value n])

Reducer Java:

public void reduce(Text key, Iterable<IntWritable> values, Context context)
    throws IOException, InterruptedException {

    int sum = 0;
    for (IntWritable value : values){
        sum += value.get();
    }
    context.write(key,new IntWritable(sum));
}

相反,python中的reducer输入是:

key1, value1
key1, value2
key1, value n

python中的缩减器:

values = defaultdict(int)
for line in sys.stdin:
    word, count = line.split('\t', 1)
    count = int(count)
    values[word] = values[word]+count
for key,value in values.items():
    print ('%s\t%s' % (key, value))

在python中,我使用hadoop-streaming.jar来启动地图缩小代码(https://hadoop.apache.org/docs/r1.2.1/streaming.html

因此在python中,我必须在排序过程之后使用相同的键将代码写入“随机”值,但是在Java中,随机部分是自动的。似乎在python和java中的重排和排序是不同的。实际上,python会跳过值列表的改组。 是否可以像在Java中那样在python中进行随机排序和排序?

谢谢

0 个答案:

没有答案