Mapreduce 回车 return
Mapreduce carriage return
我想使用输入格式 s3a 在 MapReduce 中处理 CommonCrawl WARC 文件。
问题是输入行末尾的回车 return 字符被移除,取而代之的是制表符(因为它是默认分隔符)。
为什么会这样?
这是我启动 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)
您可以设置-D mapreduce.output.textoutputformat.separator=$'\r'
。但这将向每一行添加一个 \r
,即使输入中没有。
MapReduce 作业期望映射器输出一对,用于分隔输出中的键和值的分隔符由 (mapreduce.output.textoutputformat.separator`(制表符是默认值)设置。
顺便说一句,WARC 文件不是文本文件 - 有二进制负载(PDF、图像)并且 HTML 没有固定的内容编码。您可以考虑使用 WARC 解析库(例如,warcio) or simply use cc-mrjob or cc-pyspark 来进行处理。
我想使用输入格式 s3a 在 MapReduce 中处理 CommonCrawl WARC 文件。
问题是输入行末尾的回车 return 字符被移除,取而代之的是制表符(因为它是默认分隔符)。
为什么会这样?
这是我启动 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)
您可以设置-D mapreduce.output.textoutputformat.separator=$'\r'
。但这将向每一行添加一个 \r
,即使输入中没有。
MapReduce 作业期望映射器输出一对,用于分隔输出中的键和值的分隔符由 (mapreduce.output.textoutputformat.separator`(制表符是默认值)设置。
顺便说一句,WARC 文件不是文本文件 - 有二进制负载(PDF、图像)并且 HTML 没有固定的内容编码。您可以考虑使用 WARC 解析库(例如,warcio) or simply use cc-mrjob or cc-pyspark 来进行处理。