2015-09-07 2 views
0

Следующий код работает достаточно хорошо, но когда у меня уже есть два существующих пакета (с их псевдонимом, предположим, что S1 и S2 для представления двух существующих пакетов для двух наборов), интересно, как вызвать UDF setDifference для генерации установить различия? Я думаю, что если я вручную создам дополнительный пакет, используя мои уже существующие входные мешки (S1 и S2), это будут дополнительные накладные расходы?Hadoop Pig UDF вызов номер

register datafu-1.2.0.jar; 
define setDifference datafu.pig.sets.SetDifference(); 

-- ({(3),(4),(1),(2),(7),(5),(6)} \t {(1),(3),(5),(12)}) 
A = load 'input.txt' AS (B1:bag{T:tuple(val:int)},B2:bag{T:tuple(val:int)}); 

F1 = foreach A generate B1; 
F2 = foreach A generate B2; 

differenced = FOREACH A { 
    -- input bags must be sorted 
    sorted_b1 = ORDER B1 by val; 
    sorted_b2 = ORDER B2 by val; 
    GENERATE setDifference(sorted_b1,sorted_b2); 
} 

-- produces: ({(2),(4),(6),(7)}) 
DUMP differenced; 

Update:

Вопрос есть предположим, что у меня есть два мешка уже, как позвонить в UDF setDifference, чтобы получить набор отличий? Нужно ли мне создать еще одну супер-сумку, в которой есть две отдельные сумки? Благодарю.

спасибо заранее, Лин

ответ

1

Я не вижу никаких накладных вопрос с вызовом UDF.

Ссылка: http://datafu.incubator.apache.org/docs/datafu/guide/set-operations.html, у нас есть пример использования метода SetDifference.

Согласно API (http://datafu.incubator.apache.org/docs/datafu/1.2.0/datafu/pig/sets/SetDifference.html) Метод SetDifference берет мешки в качестве входных данных и испускает разницу между ними.

N.B. Обратите внимание, что входные мешки должны быть отсортированы.

В примере фрагмент кода совместно, я не вижу необходимости ниже фрагмент кода

F1 = foreach A generate B1; 
F2 = foreach A generate B2; 
+0

спасибо за ответ, вы имеете в виду позвонить setDifference с F1 и F2 в качестве входных параметров? Благодарю. –

+0

@LinMa: Я не вижу необходимости в псевдонимах F1 и F2 в приведенном выше фрагменте кода. Ссылка в первом соединении мы имеем пример использования метода SetDifference. –

+0

Извините, я не могу четко заявить о своей проблеме. Я имею в виду, если у меня уже есть две сумки, как назвать UDF setDifference? В образце кода, похоже, предполагается, что он читается из файла с двумя пакетами. –

Смежные вопросы