pig:按范围分组/装箱数据

lkaoscv7  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(442)

我有一组整数值,我想分组成一堆垃圾箱。
例如:假设我在1到1000之间有1000个点,我想做20个箱子。
是否仍要将它们分组到一个bin/数组中?
另外,我不会提前知道范围有多宽,所以我不能硬编码任何特定的值。

6xfqseft

6xfqseft1#

如果你有最小值和最大值,你可以把范围除以箱子的数量。例如,

-- 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

剧本背后的想法是我们可以划分范围 [MIN, MAX] 按箱子计数获得每个箱子的大小: (MAX - MIN + 1) / BIN_COUNT ,称为binu size。然后我们将idMap到bin编号: (id - MIN) / BIN_SIZE ,并将它们分组。

相关问题