2015-11-20 40 views
2

我試圖找出降序的工資,但輸出不正確。我以本地模式運行豬。本地模式下的豬錯誤

我輸入如下:

a,[email protected],5000 

b,[email protected],3000 

c,[email protected],10000 

a,[email protected],2000 

c,[email protected],40000 

d,[email protected],7000 

e,[email protected],1000 

f,[email protected],9000 

f,[email protected],110000 

因爲我需要電子郵件和工資(以降序),所以這裏是我做的。但不出所料

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

B = foreach A generate $1,$2; 

c = ORDER B by $1 DESC; 

輸出不是:

([email protected],9000) 

([email protected],7000) 

([email protected],5000) 

([email protected],40000) 

([email protected],3000) 

([email protected],2000) 

([email protected],110000) 

([email protected],10000) 

([email protected],1000) 

當我不提B = foreach A generate $1,$2;並繼續,如預期的輸出。

對此有何建議?

回答

1

演員的字節組轉換成int,然後順序:

試試這個代碼:

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

b = FOREACH a GENERATE $1,(int)$2; 

c = order b by $1 DESC; 
dump c; 
+0

這將正常工作。 @ user5587445 –

0

它將您的數字視爲字符串並執行字典排序而不是數字。在加載時,分配名稱和類型以防止出現這種情況,並使代碼更具可讀性/可維護性。 ...USING PigStorage(',') AS (letter:chararray, email:chararray, salary:int)

+0

我甚至嘗試that..Unfortunately,結果仍然一樣。還有,如果它是導致辭書!排序,然後在第二種情況下,我沒有生成兩個字段並執行操作(取所有3個字段),我應該得到相同的結果。對?但它不會發生。 – Sumit