2

我有一个大文件,格式如下

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 只获得一个样本名称?

4

1 回答 1

2

仅供参考,实际上有一种更简洁的方法来使用自定义 OutputFormat 分割文件

这个链接描述了如何很好地做到这一点。我最终为我的特定应用程序定制了这个其他链接。总之,它只有几行额外的 Java

于 2013-07-03T20:11:08.497 回答