Я пытаюсь запустить простую задачу уменьшения количества слов на карте Amazon Elastic Map Reduce, но на выходе получается тарабарщина. Входной файл является частью файлов общего сканирования, которые представляют собой файлы последовательностей Hadoop. Предполагается, что файл представляет собой извлеченный текст (удаленный из html) с просканированных веб-страниц.
Мой шаг AWS Elastic MapReduce выглядит следующим образом:
Mapper: s3://com.gpanterov.scripts/mapper.py
Reducer: s3://com.gpanterov.scripts/reducer.py
Input S3 location: s3://aws-publicdatasets/common-crawl/parse-output/segment/1341690169105/textData-00112
Output S3 location: s3://com.gpanterov.output/job3/
Задание выполняется успешно, однако на выходе получается тарабарщина. Есть только странные символы и вообще нет слов. Я предполагаю, что это связано с тем, что файлы последовательности хаупов не могут быть прочитаны стандартно? Однако как запустить задание mr для такого файла? Должны ли мы сначала преобразовать файлы последовательности в текстовые файлы?
Первые несколько строк из part-00000 выглядят так:
'\x00\x00\x87\xa0 was found 1 times\t\n'
'\x00\x00\x8e\x01:\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x05\xc1=K\x02\x01\x00\x80a\xf0\xbc\xf3N\xbd\x0f\xaf\x145\xcdJ!#T\x94\x88ZD\x89\x027i\x08\x8a\x86\x16\x97lp0\x02\x87 was found 1 times\t\n'
Вот мой маппер:
#!/usr/bin/env python
import sys
for line in sys.stdin:
words = line.split()
for word in words:
print word + "\t" + str(1)
И мой редуктор:
#!/usr/bin/env python
import sys
def output(previous_key, total):
if previous_key != None:
print previous_key + " was found " + str(total) + " times"
previous_key = None
total = 0
for line in sys.stdin:
key, value = line.split("\t", 1)
if key != previous_key:
output(previous_key, total)
previous_key = key
total = 0
total += int(value)
output(previous_key, total)
Во входном файле нет ничего плохого. На локальной машине я запустил hadoop fs -text textData-00112 | less
, и это возвращает чистый текст с веб-страниц. Мы высоко ценим любой вклад в то, как запустить задание python Streaming mapreduce для этих типов входных файлов (файлы последовательностей Hadoop с общим сканированием).