【问题标题】:Pig: Group By, Average, and Order By猪:分组依据、平均值和排序依据
【发布时间】:2015-06-15 20:09:37
【问题描述】:

我是 pig 新手,我有一个文本文件,其中每一行包含以下格式的不同信息记录:

name, year, count, uniquecount

例如:

Zverkov winced_VERB 2004    8   8
Zverkov winced_VERB 2008    4   4
Zverkov winced_VERB 2009    1   1
zvlastni _ADV_  1913    1   1
zvlastni _ADV_  1928    2   2
zvlastni _ADV_  1929    3   2

我想按唯一名称对所有记录进行分组,然后为每个唯一名称计算计数/唯一计数,最后按此计算值对输出进行排序。

这是我一直在尝试的:

bigrams = LOAD 'input/bigram/zv.gz' AS (bigram:chararray, year:int, count:float, books:float);
group_bigrams = GROUP bigrams BY bigram;
average_bigrams = FOREACH group_bigrams GENERATE group, SUM(bigrams.count) / SUM(bigrams.books) AS average;
sorted_bigrams = ORDER average_bigrams BY average;

【问题讨论】:

  • 请。共享输入测试数据和所需输出以更好地理解用例。
  • 继续尝试一下,然后将您的代码和问题放在这里,我们很乐意为您提供帮助。
  • 我用我一直在尝试的代码添加了一个更新。如果您需要更多信息,请告诉我。
  • @MrFlom:请分享输入测试数据和相同的预期输出。
  • @MuraliRao 你可以下载输入数据here。预期的输出将类似于:1. uniquename1, 50 2. uniquename2, 40 3. uniquename3, 35 等

标签: sorting group-by apache-pig average


【解决方案1】:

看来我的原始代码确实产生了所需的输出,只需稍作改动:

bigrams = LOAD 'input/bigram/zv.gz' AS (bigram:chararray, year:int, count:float, books:float);
group_bigrams = GROUP bigrams BY bigram;
average_bigrams = FOREACH group_bigrams GENERATE group, SUM(bigrams.count)/SUM(bigrams.books) AS average;
sorted_bigrams = ORDER average_bigrams BY average DESC, group ASC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多