gpt4 book ai didi

hadoop - pig : Running two aggregation functions

转载 作者:可可西里 更新时间:2023-11-01 16:23:47 24 4
gpt4 key购买 nike

我是 Pig 的新手,想运行两个聚合函数,但我不知道该怎么做。我的数据包括每行一次购买交易,其中我有一个 SKU(库存标识符)和客户为 SKU 支付的价格(价格可能会有所不同):

sku   price_paid
--- ----------
123 21.70
789 62.12
123 22.10
123 19.78
456 11.91
789 55.13

我想生成以下列表,其中包含 SKU、购买该 SKU 的次数以及为该 SKU 支付的平均价格。该列表应按计数降序排列。

sku      count  ave_price_paid
--- --------- --------------
123 3 21.19
789 2 58.63
456 1 11.91

如有任何帮助,我们将不胜感激。我目前还没有走远:

A = LOAD 'mydata.csv' USING PigStorage(',') AS (sku:chararray, price_paid:double);
B = GROUP A BY sku;

最佳答案

聚合函数接受一袋值并产生单个值。由于您将操作的包是属于 GROUP BY 语句创建的关系的一部分的字段,因此我将首先对此进行解释。

GROUP BY 会将给定键具有相同值的所有记录收集到包中(包是记录的无序集合)。关系 B 的记录包含 2 个字段:

  1. 一个 key ,被命名为组(即sku)
  2. 一袋收集的记录,其名称是为其分组的别名(关系名称)(即 A)。请注意下面您的包如何“继承”与 A 相同的架构。

让我们尝试使用 DESCRIBE 语句,它将向您显示关系的模式,例如如果你这样做:

DESCRIBE B;

输出是:

B: {group: chararray,A: {(sku: chararray,price_paid: double)}}

与上面的解释相对应。

考虑到这一点,现在您可以执行以下语句:

C = FOREACH B GENERATE group, COUNT(A) as (count:long), AVG(A.price_paid) as (avg:double);

COUNT 计算一个包中的记录数,AVG 平均所有作为输入提供的值,e.i.包中元组记录的 price_paid 值(请注意您需要访问它们的方式!)

然后您执行订购:

D = ORDER C BY count desc;

完整代码如下:

A = LOAD 'pathOfYourFile' as (sku:chararray, price_paid:double);
B = GROUP A BY sku;
C = FOREACH B GENERATE group, COUNT(A) as (count:long), AVG(A.price_paid) as (avg:double);
D = ORDER C BY count desc;

有关 pig 内置函数的更多信息,您可以查看 apache 引用资料:http://pig.apache.org/docs/r0.13.0/func.html

关于hadoop - pig : Running two aggregation functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com