Mapreduce возврат каретки - PullRequest
       21

Mapreduce возврат каретки

0 голосов
/ 18 января 2019

Я хочу обработать файлы CommonCrawl WARC в MapReduce, используя формат ввода s3a.

Проблема заключается в том, что символ возврата каретки в конце строк ввода удаляется и вместо него ставится символ табуляции (так как это разделитель по умолчанию).

Почему это происходит?

Это код, с которого я запускаю MapReduce

time yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
  -D mapred.compress.map.output=true \
  -D mapred.reduce.tasks=0 \
  -D mapred.job.name=cc \
  -D fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider \
  -files mapper.py \
  -archives wasbs://cluster@ccscsg.blob.core.windows.net/user/ubuntu/virtualenv/.venv2.zip#venv \
  -mapper mapper.py \
  -input s3a://commoncrawl/crawl-data/CC-MAIN-2018-39/segments/1537267155413.17/warc/CC-MAIN-20180918130631-20180918150631-00000.warc.gz \
  -output /output_warc

mapper.py

#!./venv/bin/python
import sys
for line in sys.stdin:
    sys.stdout.write(line)

1 Ответ

0 голосов
/ 20 января 2019

Вы можете установить -D mapreduce.output.textoutputformat.separator=$'\r'. Но это добавит \r к каждой строке, даже если ее не было на входе.

В задании MapReduce ожидается, что в качестве выходных данных сопоставителя будет использоваться пара, а разделитель, используемый для разделения ключа и значения в выходных данных, устанавливается с помощью (mapreduce.output.textoutputformat.separator` (по умолчанию используется символ табуляции).

Кстати, файлы WARC не являются текстовыми файлами - существует двоичная полезная нагрузка (PDF-файлы, изображения), а в HTML нет фиксированной кодировки содержимого. Вы можете использовать библиотеку WARC (например, warcio ) или просто использовать cc-mrjob или cc-pyspark для выполнения обработки.

...