PIG:计算每篇文章的wiki页面数数据请求的最高月度增长



我有几个来自https://dumps.wikimedia.org/other/pagecounts-raw/2015/现在,我想计算2015年每篇维基文章的月请求增长率,然后找出一篇文章请求增长率最高的月份是什么,增长率有多高。。。用于解释:wikidata的格式为:"wikiproject"文章url"请求数"页面大小(字节)",例如:fr.b特别报道:Recherche/Achille_Baraguey_d%5C%27Hilliers 1 624en 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)作为"diff">0?diff:0)作为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的列,并将其用于表达式中。希望你觉得这个答案有用。非常感谢。

最新更新