3
我有一組整數值,我想將它們組合成一堆箱子。豬:按範圍/裝箱數據分組
例如:假設我有1000到1000之間的點數,我想要做20個垃圾箱。
無論如何將它們分組到一個bin /數組?
此外,我不會提前知道範圍有多寬,所以我無法對任何特定值進行硬編碼。
我有一組整數值,我想將它們組合成一堆箱子。豬:按範圍/裝箱數據分組
例如:假設我有1000到1000之間的點數,我想要做20個垃圾箱。
無論如何將它們分組到一個bin /數組?
此外,我不會提前知道範圍有多寬,所以我無法對任何特定值進行硬編碼。
如果您有最小值和最大值,可以將範圍除以箱的數量。例如,
-- 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劃分範圍[MIN, MAX]
讓每一個箱子的大小:(MAX - MIN + 1)/BIN_COUNT
,稱爲BIN_SIZE。然後我們將id映射到bin號碼:(id - MIN)/BIN_SIZE
,並對它們進行分組。
您可以先計算您的輸入數據的最小值和最大值,然後進行小組工作? – zsxwing
我可以做到這一點,所以是從最小和最大是好的開始 –