我有一个格式如下的大文件
sample name \t index \t score
我正在尝试使用Hadoop Streaming根据示例名称拆分此文件。 我提前知道有多少样品,所以可以指定我需要多少个减速器。 这个post做的非常相似,所以我知道这是可能的。
我尝试使用以下脚本将此文件拆分为16个文件(有16个样本)
hadoop jar $STREAMING \
-D mapred.text.key.partitioner.options=-k1,1 \
-D stream.num.map.output.key.fields=2 \
-D mapred.reduce.tasks=16 \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-mapper cat \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-input input_dir/*part* -output output_dir
这有点奏效 - 有些文件只包含一个样本名称。但是大部分*文件都是空白的,部分*文件包含多个样本名称。
有没有更好的方法来确保每个reducer只获得一个样本名称?