猪最小命令和命令

时间:2016-03-23 16:21:58

标签: apache-pig

我有shell形式的数据,$ 917.14,$ 654.23,2013

我必须找出第1列和第2列

中的最小值

我试图通过asc order

按这些列进行订购

但答案并不正确。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

参考MIN

A = LOAD 'test1.txt' USING PigStorage(',') as (f1:chararray,f2:float,f3:float,f4:int,f5:int,f6:int);
B = GROUP A ALL;
C = FOREACH B GENERATE MIN(A.f2),MIN(A.f3);
DUMP C;

Output

EDIT1:您加载的数据中包含'$'。您要么必须清理它并将其加载到浮点字段以应用MIN函数或将其加载到chararray中替换'$'然后将其转换为float并应用MIN函数。

EDIT2:以下解决方案没有删除原始数据中的$,而是在PigScript中处理它。

<强>输入

shell,$820.48,$11992.70,996,891,1629
shell,$817.12,$2105.57,1087,845,1630
Bharat,$974.48,$5479.10,965,827,1634
Bharat,$943.70,$9162.57,939,895,1635

<强> PigScript

A = LOAD 'test5.txt' USING TextLoader() as (line:chararray);
A1 = FOREACH A GENERATE REPLACE(line,'([^a-zA-Z0-9.,\\s]+)','');
B = FOREACH A1 GENERATE FLATTEN(STRSPLIT($0,','));
B1 = FOREACH B GENERATE $0,(float)$1,(float)$2,(int)$3,(int)$4,(int)$5;
C = GROUP B1 ALL;
D = FOREACH C GENERATE CONCAT('$',(chararray)MIN(B1.$1)),CONCAT('$',(chararray)MIN(B1.$2));
DUMP D;

<强>输出

Output

相关问题