我有一个大文件,格式如下
sample name \t index \t score
我正在尝试使用hadoop流媒体根据示例名称拆分这个文件。我提前知道有多少样品,所以可以指定我需要多少还原剂。这篇文章做的事情非常相似,所以我知道这是可能的。
我尝试使用以下脚本将此文件拆分为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文件包含多个示例名称。
有没有更好的方法确保每个减速机只有一个样本名称?
1条答案
按热度按时间bf1o4zei1#
仅供参考,实际上有一种更干净的方法可以使用自定义输出格式分割文件
这个链接描述了如何做到这一点。最后我为我的特定应用程序定制了另一个链接。总而言之,它只是java的几行额外代码