如何使用 PIG 中的 MAX 函数检索相应行的最大值?

abh*_*ari 3 apache-pig

我有一个表,其中包含国家(chararray)、人口(int)、区域(int)列。我需要找到一个人口较多的国家/地区,其中区域等于 1。我需要控制台上的国家/地区名称和人口。

我在加载后尝试了这些语句。

fl = filter st by zone==1;
grp = group fl by zone;
result = foreach grp generate fl.country,MAX(fl.population);
dump result
Run Code Online (Sandbox Code Playgroud)

它给了我所有的名字和人口。我可以尝试“排序依据”和“限制”,但我只需要使用 MAX 函数。

我试图展平运算符,但它要求我尝试显式强制转换。能否请您验证一下。

我在这里包括示例数据

country,population,zone
india 3000 1
Australia 4000 2
US 5000 1
China 3000 1
Russia 500 1
Run Code Online (Sandbox Code Playgroud)

Ran*_*car 5

同样可以通过这种方式完成:

A = load 'data' using PigStorage(' ') as (c:chararray,p:int,z:int);
B = filter A by z==1;
C = foreach (group B all) {
    ordered = order B by p DESC; 
    limited = limit ordered 1; 
    generate flatten(limited)
}
dump C;
Run Code Online (Sandbox Code Playgroud)

与 MAX 相比,这种方法的主要优点是您可以轻松调整它以提供“top K”(只需替换 limit 语句的参数)。另外,我认为它使用较少的映射缩减作业 - 过滤是在映射器中完成的,所有其余的都是在缩减器中完成的。使用MAX+Filtering之后需要两个工作。