我有一些数据由 0 到 200 几百万范围内的 id 键入,我需要将其拆分为 0-5mil、5mil-10mil 等范围内的美元。
我正在尝试在最后一部分使用 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;
}
}
但它似乎根本没有被调用。即使我用return 1;
跨文件的数据替换返回行似乎是散列分布的默认行为。