Pig:按范围/分级数据分组

Jay*_*ith 3 java hadoop histogram apache-pig binning

我有一组整数值,我想分组成一堆箱.

示例:假设我在1到1000之间有一千分,我想要做20个分档.

无论如何将它们分组到bin/array中?

另外,我不会提前知道范围有多宽,所以我无法对任何特定值进行硬编码.

zsx*_*ing 8

如果您有最小值和最大值,则可以将范围除以箱数.例如,

-- 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;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令来运行它:

pig -f foo.pig -p MIN=1 -p MAX=1000 -p BIN_COUNT=20 -p INPUT=your_input_path
Run Code Online (Sandbox Code Playgroud)

脚本背后的想法是我们可以将范围[MIN, MAX]除以BIN_COUNT以获得每个bin的大小:(MAX - MIN + 1) / BIN_COUNT,称为BIN_SIZE.然后我们将id映射到bin编号:(id - MIN) / BIN_SIZE,并将它们分组.