Перемешать и отсортировать с помощью hadoop-streaming.jar и python - PullRequest
0 голосов
/ 17 апреля 2019

Я изучаю парадигму 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?

Спасибо

...