Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache pig 如何在pig拉丁语中找到元组的最大值_Apache Pig - Fatal编程技术网

Apache pig 如何在pig拉丁语中找到元组的最大值

Apache pig 如何在pig拉丁语中找到元组的最大值,apache-pig,Apache Pig,最后,我用pig拉丁语得出了以下数据。 (全部,{((1,a)、(3,b)、(2,d))}) 现在我需要找到第一个数字(1/2/3)的最大值,然后显示整个元组。我希望输出为3,b. 请帮助我如何用拉丁语写这篇文章。获取max的步骤: A = load 'pdemo/sample' using Pigstorage(',') as(id:int,name:chararray); grp = group A all; res = foreach grp generate MAX(A.id)

最后,我用pig拉丁语得出了以下数据。
(全部,{((1,a)、(3,b)、(2,d))}) 现在我需要找到第一个数字(1/2/3)的最大值,然后显示整个元组。我希望输出为3,b.
请帮助我如何用拉丁语写这篇文章。

获取max的步骤:

A = load 'pdemo/sample' using Pigstorage(',')  as(id:int,name:chararray); 
grp = group A all;   
res = foreach grp generate MAX(A.id) as max;
ij = join A by id,res by max;  
fresult = foreach ij generate A::id,A::name;
dump fresult 
希望这会有帮助

flattensum1 = FOREACH sumcolors1 GENERATE          
FLATTEN(TOBAG(TOTUPLE($0,$1),TOTUPLE($2,$3),TOTUPLE($4,$5));

orderflattensum1 = ORDER flattensum1 by $0 desc;

limitorderflattensum1 = LIMIT orderflattensum1 1;
我用我的数据后退了一步。我把这个作为输入(1,a),(3,b),(2,d) 我没有将它们分组,而是使用上述语句将它们作为单独的行,然后按desc对其排序。然后将行限制为1


无论如何,谢谢你的回复。我也将尝试您的回答。

让我们加载名为
emp
的关系并将其分组,然后找到工资最高的
emp

emp = load '' USING PigStorage() AS (employee_id:int, employee_name:chararray, job:chararray, mgr:int, hiredate:datetime, salary:int, commission:int, department_no:int);

emp_salary_id_mgr = foreach emp generate salary, employee_name;

emp_grouped = group emp_salary_id_mgr all;

(all,{(5000,KING),(2850,BLAKE),(2450,CLARK),(2975,JONES),(3000,SCOTT),(3000,FORD),(800,SMITH),(1600,ALLEN),(1250,WARD),(1250,MARTIN),(1500,TURNER),(1100,ADAMS),(950,JAMES),(1300,MILLER),(10000,KPIYA),(1300,KILLER)})
让我们来描述分组关系

emp_grouped: {group: chararray,emp_salary_id_mgr: {(salary: int,employee_name: chararray)}}
让我们找到最高工资

sal_max = foreach emp_grouped generate MAX(emp_salary_id_mgr.salary) AS max_salary_val;

(10000)
但是我们需要找到整行(10000,KPIYA),所以让我们执行join

emp_grouped_join_sal_max = JOIN emp_grouped by emp_salary_id_mgr.salary , sal_max BY max_salary_val;
--错误消息“无法合并联接键,不兼容类型”

现在我们需要把袋子压平,这样我们就可以进行连接了

emp_grouped_flattened = foreach emp_grouped GENERATE FLATTEN($1);

emp_joined_maxsal = JOIN emp_grouped_flattened by emp_salary_id_mgr::salary, sal_max by max_salary_val;

emp_output = foreach emp_joined_maxsal generate TOTUPLE(emp_grouped_flattened::emp_salary_id_mgr::salary,emp_grouped_flattened::emp_salary_id_mgr::employee_name);
输出如下所示,与所需相同

((10000,KPIYA))

我已经回答了我的问题。不过我做的有点不同。我在你的答案中添加了代码格式,但我不完全确定它是否应该是一个大的代码块。如果我犯了错误,请编辑。