Я изучаю парадигму mapreduce.
Я пытаюсь сделать классическое упражнение для WordCount с использованием Python и Java. В java ввод редуктора после перемешивания и сортировки
(key1, [value1, value 2, ... , value n])
Редуктор 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:
key1, value1
key1, value2
key1, value n
Редуктор в питоне:
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 пропускает перемешивание списка значений.
Можно ли сделать перемешивание и сортировку в Python, как в Java?
Спасибо