Присоединиться к результатам двух рабочих мест MapReduce вместе - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь объединить результаты, полученные от двух заданий MapReduce.Первая работа возвращает 5 самых влиятельных статей.Ниже приведен код для первого редуктора.

import sys
import operator

current_word = None
current_count = 0
word = None
topFive = {}
# input comes from stdin
for line in sys.stdin:
    line = line.strip()

    # parse the input we got from mapper.py
    word, check = line.split('\t')
    if check != None:
        count = 1

    if current_word == word:
        current_count += count
    else:
        if current_word:
            topFive.update({current_word: current_count})
            #print(current_word, current_count)
        current_count = count
        current_word = word
if current_word == word:

    print(current_word, current_count)

t = sorted(topFive.iteritems(), key=lambda x:-x[1])[:6]
print("Top five most cited papers")
count = 1
for x in t:
    if x[0] != 'nan' and count <= 5:
        print("{0}: {1}".format(*x))
        count = count + 1

Вторая работа находит 5 самых влиятельных авторов, и код более или менее совпадает с кодом выше.Я хочу взять результаты этих двух заданий и присоединиться к ним, чтобы я мог определить для каждого автора среднее число цитирований их 3 наиболее влиятельных статей.Я не могу понять, как это сделать, кажется, мне нужно как-то объединить результаты?

1 Ответ

0 голосов
/ 08 ноября 2018

Пока у вас получится два выходных каталога, один для авторов и один для статей.

Теперь вы хотите выполнить операцию JOIN (как в случае с языками БД) с обоими файлами.Для этого способ MapReduce состоит в том, чтобы выполнить третью работу, выполняя эту операцию с двумя выходными файлами.

Операции JOIN в Hadoop хорошо изучены.Один из способов сделать это - шаблон соединения на стороне редуктора.Шаблон состоит в том, что преобразователь создает составной ключ из двух подразделов (один исходный ключ + логический ключ, определяющий, является ли таблица 0 или 1).

Перед тем, как перейти к редуктору, необходимо создать разделитель, который разделяетэти составные ключи.Редукторы просто получат одинаковые ключи из каждой таблицы.

Дайте мне знать, если вам нужны дополнительные разъяснения, я написал этот довольно быстро.

...