我试图按降序查找工资,但输出结果不正确。我在当地模式下养猪。
我的输入如下:
a,a@xyz.com,5000
b,b@xyz.com,3000
c,c@xyz.com,10000
a,a1@xyz.com,2000
c,c1@xyz.com,40000
d,d@xyz.com,7000
e,e@xyz.com,1000
f,f@xyz.com,9000
f,f1@xyz.com,110000
因为我需要电子邮件和工资(在desc中)所以这就是我所做的。
A = load '/local_input_path' USING PigStorage(',');
B = foreach A generate $1,$2;
c = ORDER B by $1 DESC;
但输出并不像预期的那样:
(f@xyz.com,9000)
(d@xyz.com,7000)
(a@xyz.com,5000)
(c1@xyz.com,40000)
(b@xyz.com,3000)
(a1@xyz.com,2000)
(f1@xyz.com,110000)
(c@xyz.com,10000)
(e@xyz.com,1000)
当我没有提及B = foreach A generate $1,$2;
并继续时,输出就像预期的那样。
对此有何建议?
答案 0 :(得分:1)
将bytearray转换为int然后命令:
试试这段代码:
a = LOAD '/local_input_path' using PigStorage(',');
b = FOREACH a GENERATE $1,(int)$2;
c = order b by $1 DESC;
dump c;
答案 1 :(得分:0)
它将您的数字视为字符串并执行词典排序而不是数字。当您正在加载时,请指定名称和类型以帮助防止这种情况,并使您的代码更易读/可维护。
...USING PigStorage(',') AS (letter:chararray, email:chararray, salary:int)