我一直在尝试使用hadoop-streaming.jar在hadoop中压缩文件(管道分离的csv)。我在stackoverflow上找到了以下线程: Hadoop: compress file in HDFS? 我尝试了两种解决方案(cat / cut for mapper)。虽然我最终在HDFS中使用了一个gzip压缩文件,但它现在每行末尾都有一个制表符。任何想法如何摆脱这些?最后一个标签弄乱了我的最后一栏。
我已经尝试了以下两个命令(有很多种口味):
hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
-Dmapred.output.compress=true \
-Dmapred.compress.map.output=true \
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-Dmapred.reduce.tasks=0 \
-input <filename> \
-output <output-path> \
-mapper "cut -f 2"
和
hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
-Dmapred.reduce.tasks=0 \
-Dmapred.output.compress=true \
-Dmapred.compress.map.output=true \
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-input <filename> \
-output <output-path> \
-mapper /bin/cat \
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-outputformat org.apache.hadoop.mapred.TextOutputFormat
我知道mapreduce会输出一个键值分隔标题,但是&#34; cut -f 2&#34; (也试过&#34; cut -f 2 -d,&#34;)应该只返回值部分,而不是选项卡。那么为什么每一行都以标签结尾?
我希望有人能够启发我。