【问题标题】:how to find the maximum and its associated values from a grouped relation in pig?如何从猪的分组关系中找到最大值及其相关值?
【发布时间】:2016-05-12 13:39:21
【问题描述】:

以下是我的意见

$ cat people.csv
Steve,US,M,football,6.5
Alex,US,M,football,5.5
Ted,UK,M,football,6.0
Mary,UK,F,baseball,5.5
Ellen,UK,F,football,5.0

我需要根据国家/地区对我的数据进行分组。

people = LOAD 'people.csv' USING PigStorage(',') AS (name:chararray,country:chararray,gender:chararray, sport:chararray,height:float);
grouped = GROUP people BY country;

现在我必须从分组数据中找到该人的最大身高及其详细信息。

所以我尝试了以下

a = FOREACH grouped GENERATE group AS country, MAX(people.height) as height, people.name as name;

输出为

(UK,6.0,{(Ellen),(Mary),(Ted)})
(US,6.5,{(Alex),(Steve)})

但我需要我的输出应该是

(UK,6.0,Ted)
(US,6.5,Steve)

有人可以帮我实现这个吗?

【问题讨论】:

    标签: apache-pig bigdata


    【解决方案1】:

    此代码将对您有所帮助。

    根据此代码,如果同一国家/地区有两个最大身高的球员,那么您将获得这两个球员的详细信息

    records = LOAD '/home/user/footbal.txt' USING PigStorage(',') AS(name:chararray,country:chararray,gender:chararray,sport:chararray,height:double);
    
    records_grp  = GROUP records BY (country);
    
    records_each = foreach records_grp generate group as temp_country, MAX(records.height) as max_height;
    
    records_join = join records by (country,height), records_each by (temp_country,max_height);
    
    records_output = foreach records_join generate country, max_height, name;
    
    dump records_output;
    

    输出:

    (UK,6.0,Ted)
    (US,6.5,Steve)
    

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2018-05-16
      • 2013-04-04
      • 2022-01-07
      • 2016-01-28
      • 2017-09-23
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多