我有几个来自https://dumps.wikimedia.org/other/pagecounts-raw/2015/的wiki转储数据 现在我想计算2015年每篇维基文章请求的月度增长情况,然后找出一篇文章请求增长最快的月份,以及这种增长有多高...... 解释:wikidata的格式为: " File文件历史" "文章-URL" "请求数量" "以字节为单位的页面大小",例如: fr.b Special:Recherche / Achille_Baraguey_d%5C%27Hilliers 1 624 en Main_Page 242332 4737756101
我们的群集设置仍然正在进行中"所以我必须在具有较小数据集的cloudera quickstart VM上试用它。我在3个月的1小时内仅使用了pagedumps。但是当我试图说明它时,它用完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)对每月数据集进行分组,然后将它们组合在一起。然后我计算每篇文章和每个月的请求总和,计算请求的增长,我使用下个月的请求总和,并减去上个月同一篇文章的请求总和,并检查它是否' s> 0(如果有任何增长),那么我按降序计算所有增长值的最大值和maxRequests(= maxZugriffe)的关系,并将输出限制为10 ......
有人可以从代码中推断出这样的话,还是我错过了什么?正如我所说的那样,快速入门VM计算结果似乎太多了,但它对我来说似乎并不那么复杂......
我的第二个问题是:是否可以在猪中使用bincondition表达式的别名?例如: c = FOREACH b生成组,((s2-s1)为' diff'> 0?diff:0)为dm2; 所以我想用别名替换第一个案例'差异'我已经计算过,而不是再次计算(s2-s1)...
编辑:有些星期过去......但仍然没有答案,有人可以帮忙吗?
答案 0 :(得分:2)
回答你的第二个问题"是否可以在猪中使用bincondition表达式的别名?" 我们不能在bicondition表达式中使用别名。这不仅适用于猪,在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;
在我们所做的工作中,我们使用别名diff为(s2-s1)
创建了另一列,并在表达式中使用了它。
希望你觉得这个答案很有用。
谢谢。