一連のビンにグループ化したい整数値のセットがあります。
例: 1 から 1000 までの間に 1000 個のポイントがあり、20 個のビンを作成したいとします。
それらをビン/アレイにグループ化する方法はありますか?
また、範囲がどれだけ広いかは前もってわからないので、特定の値をハードコードすることはできません。
一連のビンにグループ化したい整数値のセットがあります。
例: 1 から 1000 までの間に 1000 個のポイントがあり、20 個のビンを作成したいとします。
それらをビン/アレイにグループ化する方法はありますか?
また、範囲がどれだけ広いかは前もってわからないので、特定の値をハードコードすることはできません。
最小値と最大値がある場合は、範囲をビンの数で割ることができます。例えば、
-- foo.pig
ids = load '$INPUT' as (id: int);
ids_with_key = foreach ids generate (id - $MIN) * $BIN_COUNT / ($MAX- $MIN + 1) as bin_id, id;
group_by_id = group ids_with_key by bin_id;
bin_id = foreach group_by_id generate group, flatten(ids_with_key.id);
dump bin_id;
次に、次のコマンドを使用して実行できます。
pig -f foo.pig -p MIN=1 -p MAX=1000 -p BIN_COUNT=20 -p INPUT=your_input_path
スクリプトの背後にある考え方は、範囲を BIN_COUNT で分割して、 BIN_SIZEと呼ばれる[MIN, MAX]
すべてのビンのサイズを取得できるというものです。(MAX - MIN + 1) / BIN_COUNT
次に、id を bin number: にマップし、(id - MIN) / BIN_SIZE
それらをグループ化します。