gpt4 book ai didi

hadoop - 使用 pig 或 hadoop 寻找均值

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

我有一个巨大的表格文本文件

数据保存在data/data1.txt、data2.txt等目录

merchant_id, user_id, amount
1234, 9123, 299.2
1233, 9199, 203.2
1234, 0124, 230
and so on..

我想做的是针对每个商户,求出平均金额..

所以基本上最后我想将输出保存在文件中。像

 merchant_id, average_amount
1234, avg_amt_1234 a
and so on.

如何计算标准差?

很抱歉问这么基本的问题。 :(任何帮助,将不胜感激。 :)

最佳答案

Apache PIG 非常适合此类任务。参见示例:

inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray,c2:chararray);
grp = group inpt by id;
mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate group as id, sum/count as mean, sum as sum, count as count;
};

请特别注意 amnt 列的数据类型,因为它会影响 SUM 函数 PIG 将调用的实现。

PIG 还可以做 SQL 做不到的事情,它可以在不使用任何内连接的情况下对每个输入行取平均值。如果您使用标准偏差计算 z 分数,这将很有用。

 mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate FLATTEN(inpt), sum/count as mean, sum as sum, count as count;
};

FLATTEN(inpt) 可以解决问题,现在您可以访问对组平均值、求和和计数做出贡献的原始金额。

更新 1:

Calculating variance and standard deviation :

inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray, c2:chararray);
grp = group inpt by id;
mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate flatten(inpt), sum/count as avg, count as count;
};
tmp = foreach mean {
dif = (amnt - avg) * (amnt - avg) ;
generate *, dif as dif;
};
grp = group tmp by id;
standard_tmp = foreach grp generate flatten(tmp), SUM(tmp.dif) as sqr_sum;
standard = foreach standard_tmp generate *, sqr_sum / count as variance, SQRT(sqr_sum / count) as standard;

它将使用 2 个作业。我还没有弄清楚如何一次性完成,嗯,需要花更多的时间。

关于hadoop - 使用 pig 或 hadoop 寻找均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593527/

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