2
我想刪除任何字段中至少包含一個空值的記錄。例如,如果數據有3個字段,那麼:如何在PIG中過濾空值的記錄?
filtered = FILTER data by ($0 is not null) AND ($1 is not null) AND ($2 is not null)
有沒有更乾淨的方法來做到這一點,而不必寫出3個布爾表達式?
我想刪除任何字段中至少包含一個空值的記錄。例如,如果數據有3個字段,那麼:如何在PIG中過濾空值的記錄?
filtered = FILTER data by ($0 is not null) AND ($1 is not null) AND ($2 is not null)
有沒有更乾淨的方法來做到這一點,而不必寫出3個布爾表達式?
如果所有的字段都是數字類型的,你可以簡單地做這樣的事情
filtered = FILTER data BY $0*$1*$2 is not null;
豬,如果在算術表達式中的任何條款都爲空,則結果爲空。
你也可以編寫一個UDF來獲取任意數量的參數,並且如果任何參數爲null,則返回null(或0或false,無論你認爲最方便)。
filtered = FILTER data BY NUMBER_OF_NULLS($0, $1, $2) == 0;
其中NUMBER_OF_NULLS在別處定義,例如
public class NUMBER_OF_NULLS extends EvalFunc {
public Integer exec(Tuple input) {
if (input == null) { return 0; }
int c = 0;
for (int i = 0; i < input.size(); i++) {
if (input.get(i) == null) c++;
}
return c;
}
}
注:我沒有測試上面的UDF,我不要求它遵循的最佳做法的字跡清晰,穩健的UDF。例如,您應該添加異常處理代碼。