我有一些数据是由0到200万的范围内的IDs键入的,我需要将它分成0-5mil,5mil-10mil等范围的块。Hadoop中的自定义分区程序
我试图使用自定义分区Hadoop上的这最后一部分,这样我的代码的最后一部分看起来是这样的:
Conns = FOREACH ConnsGrouped GENERATE group as memberId, $1.companyId as companyIds;
ConnsPartitioned = DISTINCT Conns PARTITION BY com.mypackage.SearchNodePartitioner PARALLEL 50;
rmf $connections_file
Store ConnsPartitioned INTO 'test' using AvroStorage(...);
我的分区看起来是这样的:
public class SearchNodePartitioner<Long, V> implements Partitioner<Long, V>
{
@Override
public void configure(JobConf conf)
{
// Nothing
}
@Override
public int getPartition(Long key, V value, int numPartitions)
{
return new Double(Math.floor(key/(5.0 * Math.pow(10, 6)))).intValue() % numPartitions;
}
}
b它似乎并没有被调用。即使当我用return 1;
替换返回行时,跨文件的数据似乎是使用默认行为散列分布的。你可以这样做
只是好奇你为什么这样接近问题。如果你想根据范围分割你的数据,我相信Pig有内置的命令来帮助你做到这一点。如果你想使用自定义的分区,通过MapReduce而不是Pig更容易吗? – Chaos
恩,好吧,我不知道第一个问题的任何命令。至于第二个问题,我正在考虑,尽管它也可能会显着延迟我的项目学习MapReduce。 – sbilstein
查看我的答案猪指令,可以帮助你做到这一点。 – Chaos