我有一个大文件,格式如下
sample name \t index \t score
我正在尝试使用 Hadoop Streaming 根据示例名称拆分此文件。我提前知道有多少样本,所以可以指定我需要多少个减速器。这篇文章正在做一些非常相似的事情,所以我知道这是可能的。
我尝试使用以下脚本将此文件拆分为 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
这有点工作 - 一些文件只包含一个示例名称。然而,大多数 part* 文件是空白的,并且一些 part* 文件包含多个样品名称。
有没有更好的方法来确保每个 reducer 只获得一个样本名称?