假设我有一个包含两列CUSTTYPE 和AMOUNT 的表。我想添加第三列 NTILE 然后我可以对其进行分组并使用它来获得我的平均值,如下所示:
CUSTTYPE | AMOUNT | NTILE
----------+---------+----------
RETAIL | 78.00 | 1
RETAIL | 234.00 | 1
RETAIL | 249.00 | 1
RETAIL | 278.00 | 2
RETAIL | 392.00 | 2
RETAIL | 498.00 | 2
RETAIL | 500.00 | 3
RETAIL | 738.00 | 3
RETAIL | 1250.00 | 3
RETAIL | 2029.00 | 4
RETAIL | 2393.00 | 4
RETAIL | 3933.00 | 4
本质上,我试图取每 n 个项的平均值(这里,n=3):
CUSTTYPE | AMOUNT | NTILE
----------+---------+----------
RETAIL | 187.00 | 1
RETAIL | 389.33 | 2
RETAIL | 829.33 | 3
RETAIL | 2785.0 | 4
来自 Pig 引用 here ,这似乎可以使用 Over()
来实现,但我找不到如何完成此操作的示例。想法?
最佳答案
您可以使用 RANK
运算符对数据的每条记录进行排名:
http://pig.apache.org/docs/r0.14.0/basic.html#rank
像这样:
A = LOAD 'path' AS (schema);
B = RANK A;
然后将每个排名除以 3:
C = FOREACH B generate ($0 + 1) / 3 as NTILE, CUSTTYPE, AMOUNT;
关于hadoop - 获取 Apache Pig 中每 N 个元组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656566/