Это реализация MRJob простой функции сортировки Map-Reduce. В beta.py
:Map-Reduce/Hadoop сортировать по целочисленному значению (используя MRJob)
from mrjob.job import MRJob
class Beta(MRJob):
def mapper(self, _, line):
"""
"""
l = line.split(' ')
yield l[1], l[0]
def reducer(self, key, val):
yield key, [v for v in val][0]
if __name__ == '__main__':
Beta.run()
я запустить его с помощью текста:
1 1
2 4
3 8
4 2
4 7
5 5
6 10
7 11
можно запустить это с помощью:
cat <filename> | python beta.py
Теперь вопрос выход сортируется при условии, что ключ типа string
(что, вероятно, имеет место здесь). Выход:
"1" "1"
"10" "6"
"11" "7"
"2" "4"
"4" "2"
"5" "5"
"7" "4"
"8" "3"
вывод, который я хочу это:
"1" "1"
"2" "4"
"4" "2"
"5" "5"
"7" "4"
"8" "3"
"10" "6"
"11" "7"
Я не уверен, если это делать с возился с протоколами MRJob, как протоколы работы специфичны и не наступайте специфичны.
EDIT (Solution): У меня есть ответ для этого. Идея состоит в том, что нужно доводить «О-байты» до каждого числа, чтобы количество байтов в каждом номере было таким же числом байтов в наибольшем числе. По крайней мере, это то, что я помню из своих занятий. Я не могу добавить ответ прямо сейчас, поскольку он не позволит мне, но это единственное решение, которое у меня есть. Если у кого-то есть что-то более прозрачное и легкое, пожалуйста, поделитесь.
Так что это один питон скрипт на самом деле создает задание MapReduce для всего кластера? Я обычно использую Hadoop Streaming, когда использую скрипт Python для записи карты. .. –
Ну, я не уверен в этом, но да, это возможно. Это то, что позволяет «MRJob». Вы можете прочитать об этом здесь - http://pythonhosted.org/mrjob/. – p0lAris