2015-05-14 103 views
0

豬新手在這裏。我有一個關係A與多個字段(f1,f2 ...)。我想快速查看每個字段中存在的所有不同值。如何在Pig中編寫函數?

現在,我這樣做:

f1 = FOREACH A GENERATE f1; 
f1 = DISTINCT f1; 
dump f1; 

我不想每場做到這一點。這太精細了。是否可以在Pig中編寫某種功能來完成此操作。我在文檔中查看了UDF,但我不想切換到Java或Python之類的其他語言。我認爲豬對我正在做的事情很好。

+0

''我想快速看到每個字段中存在的所有不同的值。「'...'」我不想爲每個字段都這樣做。「'所以你*和* *不要*想看到每個領域的獨特之處?這是一項艱鉅的任務。 – gobrewers14

+0

@ GoBrewers14對不起,我不是以英語爲母語的人。如果您明白我的意思,請隨時編輯相應的問題。 – Phani

回答

4

你所尋找的是一個。這相當於一個函數。

DEFINE MY_MACRO(relation,field) RETURNS selected_field_distinct { 
    selected_field = FOREACH $relation GENERATE $field; 
    $selected_field_distinct = DISTINCT selected_field; 
}; 


A = LOAD 'input.txt' USING PigStorage(',') AS (f1:chararray, f2:chararray); 

F1 = MY_MACRO(A,'f1'); 
F2 = MY_MACRO(A,'f2'); 

DUMP F1 
DUMP F2 

請注意:

  • 您必須聲明,你使用它的位置上方宏。
  • 您也可以將宏寫入不同的文件並將其導入腳本。
  • 在宏as described here內沒有辦法使用命令DUMP
1

一個想法值得考慮....

如果在F1看到的值不會發生F2,那麼你可以試試這個方法。在這種情況下,我們只執行一次DISTINCT。

f1 = FOREACH A GENERATE f1; 
    f2 = FOREACH A GENERATE f2; 
    ... 
    f10 = FOREACH A GENERATE f10; 

    all_values = UNION f1,f2,..., f10; 

    uniq_values = DISTINCT all_values; 
    DUMP uniq_values; 
+0

我正在尋找更通用的解決方案,使用宏將是最好的。但是,謝謝,因爲你的回答,我已經知道在關係上使用「DISTINCT」。 – Phani