本地模式下的 Pig 错误

Pig error in local mode

我试图按降序找出薪水,但输出不正确。我是 运行 本地模式的猪。

我的输入如下:

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

因为我需要电子邮件和薪水(in desc)所以这就是我所做的。

A = load '/local_input_path' USING PigStorage(',');

B = foreach A generate ,;

c = ORDER B by  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 ,; 并继续时,输出符合预期。

对此有何建议?

它将您的数字视为字符串并执行词典排序而不是数字排序。当您加载时,分配名称和类型以帮助防止这种情况并使您的代码更 readable/maintainable。 ...USING PigStorage(',') AS (letter:chararray, email:chararray, salary:int)

将bytearray转换成int然后排序:

试试这个代码:

a = LOAD '/local_input_path' using PigStorage(',');

b = FOREACH a GENERATE ,(int);

c = order b by  DESC;
dump c;