gpt4 book ai didi

apache-pig - pig : Calculate highest monthly growth in wiki pagecount data requests per article

转载 作者:行者123 更新时间:2023-12-01 03:33:06 25 4
gpt4 key购买 nike

我有几个来自 https://dumps.wikimedia.org/other/pagecounts-raw/2015/ 的维基转储数据
现在我想计算 2015 年每个 wiki 文章的月请求增长,然后找出文章请求增长最高的月份是什么,以及增长有多高......
解释:维基数据的格式:
“wikiproject” “article-url” “请求数量” “页面大小(以字节为单位)”,例如:
fr.b 特殊:Recherche/Achille_Baraguey_d%5C%27Hilliers 1 624
zh Main_Page 242332 4737756101

我们的集群设置仍在“进行中”,因此我必须在具有较小数据集的 cloudera quickstart VM 上进行尝试。我只使用了 3 个月中的 1 小时内的页面转储...但是当我尝试说明它时,它用完了 JAVA 堆空间,或者我收到消息 GC 过载....

这是我的代码:

m1  = LOAD '/user/cloudera/2015/2015-01' USING PigStorage(' ') as(proj:chararray, url:chararray, req:long, size:long);
m2 = LOAD '/user/cloudera/2015/2015-02' USING PigStorage(' ') as(proj:chararray, url:chararray, req:long, size:long);
m3 = LOAD '/user/cloudera/2015/2015-03' USING PigStorage(' ') as(proj:chararray, url:chararray, req:long, size:long);

m11 = SAMPLE m1 0.1;
m22 = SAMPLE m2 0.1;
m33 = SAMPLE m3 0.1;

a = COGROUP m11 by url, m22 by url, m33 by url;
b = FOREACH a generate group, SUM(m11.req) as s1, SUM(m22.req) as s2, SUM(m33.req) as s3;
c = FOREACH b generate group, ((s2-s1) > 0 ? (s2-s1): 0) as dm2, ((s3-s2)> 0 ? (s3-2): 0) as dm3 parallel 10;
d = FOREACH c generate group as Artikel, MAX(TOBAG(dm2,dm3)) as maxZugriffe;
e = order d by maxZugriffe desc;
f = limit e 10;

所以我想要做的是,首先我采样 10% 的原始数据,然后我按文章 (=url) 对我的每月数据集进行分组,然后我将它们组合在一起。然后我计算每篇文章和每个月的请求总和,为了计算请求的增长,我使用下个月的请求总和减去上个月同一篇文章的请求总和并检查它是否>0(如果有任何增长),那么我计算所有增长值的最大值,并通过 maxRequests (=maxZugriffe) 按降序计算我的关系并将输出限制为 10 ...

有人可以从代码中推断出是否正确,还是我遗漏了什么?正如我所说,快速启动VM计算结果似乎太多了,但对我来说似乎并没有那么复杂......

我的第二个问题是:是否可以对 pig 中的 bincondition 表达式使用别名?例如:
c = FOREACH b 生成组,((s2-s1) as 'diff' > 0 ? diff: 0) as dm2;
所以我想用我已经计算过的别名“diff”替换第一种情况,而不是再次计算 (s2-s1)...

编辑:几个星期过去了......仍然没有答案,有人可以帮忙吗?

最佳答案

回答您的第二个问题“是否可以为 pig 中的 bincondition 表达式使用别名?”
我们不能在双条件表达式中使用别名。这不仅是 pig 的情况,在 SQL 中我们也不能使用它。
我们不能给没有 (=) 赋值运算符的表达式赋予别名。
如果您确实想避免重复使用表达式,请执行以下操作

b = FOREACH a generate group, SUM(m11.req) as s1, SUM(m22.req) as s2, SUM(m33.req) as s3;  
x = FOREACH b generate group,s1,s2,s3,(s2-s1) as diff;
c = FOREACH x generate group, (diff > 0 ? diff: 0) as dm2;

在我们所做的事情中,我们为 (s2-s1) 创建了另一个列。使用别名 diff 并在表达式中使用它。
希望你觉得这个答案有用。
谢谢你。

关于apache-pig - pig : Calculate highest monthly growth in wiki pagecount data requests per article,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724557/

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