0 から 2 億程度の範囲の ID でキー付けされたデータがいくつかあり、0 から 5 ミル、5 ミルから 10 ミルなどの範囲のドルに分割する必要があります。
コードの最後の部分が次のようになるように、この最後の部分に 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;
、デフォルトの動作でハッシュ分散されているようです。