У меня проблема с сортировкой при использовании MapReduce с потоковой передачей и Python.
Это часть более серьезной проблемы, но ее можно уменьшить (без каламбура :)) до:
>> cat inputFile.txt
a b 1 file1
a b 2 file1
e f 0 file2
d c 3 file3
d e 2 file4
a c 5 file5
a b 3 file1
d c 2 file3
e f 2 file2
a c 4 file5
d e 10 file4
Первый и второй столбцы - это ключи.
Мне бы хотелось, чтобы выходные данные фазы карты были отсортированы таким образом (сначала по столбцу 1, затем по 2, а затем по 3):
>>sort -k1,1 -k2,2 -k3n,3 inputFile.txt
a b 1 file1
a b 2 file1
a b 3 file1
a c 4 file5
a c 5 file5
d c 2 file3
d c 3 file3
d e 2 file4
d e 10 file4
e f 0 file2
e f 2 file2
Четвертый столбец здесь - это подсказка о том, какЯ хотел бы, чтобы файлы были для шага сокращения, но это нормально, если два ключа находятся в одном файле (если все экземпляры каждого ключа находятся в одном файле).Для этого я запускаю следующую команду:
hadoop jar /usr/lib/hadoop/hadoop-streaming.jar -D stream.num.map.output.key.fields=2 -D mapred.text.key.comparator.options="-k3,3" -D mapred.text.key.partitioner.options="-k3,3" -mapper cat -reducer cat -input /user/hadoop/inputFile.txt -output /user/hadoop/output
Вывод этой команды не отсортирован.Например:
>>cat output/part-00066
a b 2 file1
a b 3 file1
a b 1 file1
Примечания:
- Я знаю, что в приведенной выше команде я использовал "-k3,3", а не "-k3n, 3", но я простохотел посмотреть, работает ли какой-либо вид вначале
- Я пытался использовать "-k1,1, -k2,2 -k3n, 3", но я получил тот же результат
- Я пытался использовать 3 дляколичество полей и это дало результат, где ключи находятся в отдельных файлах
Это как что-то очень простое, что я пропускаю, что я здесь не так делаю?
Спасибомного за вашу помощь!