hadoop - 获取 Apache Pig 中每 N 个元组的平均值

标签 hadoop apache-pig quantile

假设我有一个包含两列CUSTTYPEAMOUNT 的表。我想添加第三列 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/

相关文章:

hadoop - HDFS 未检测到数据节点容量增加

Hadoop 集群 : bigger nodes or more nodes

hadoop - 是否有用于上传到 HDFS 的现有门户

hadoop - PIG-从一个大型输入中优化各种分组结构的最佳方法

r - 当中断不唯一时将列中的值分配给十分位数

Hadoop 网络用户 : No such user

hadoop - 在 PIG 中一次左外连接超过 2 个关系

python - PANDAS Quantiles 根据我们的提问方式给出不同的答案

r - 以相反顺序枚举分位数

bash - "-bash: cd: hadoop: Not a directory"是什么意思?