Следующий код работает достаточно хорошо, но когда у меня уже есть два существующих пакета (с их псевдонимом, предположим, что 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, чтобы получить набор отличий? Нужно ли мне создать еще одну супер-сумку, в которой есть две отдельные сумки? Благодарю.
спасибо заранее, Лин
спасибо за ответ, вы имеете в виду позвонить setDifference с F1 и F2 в качестве входных параметров? Благодарю. –
@LinMa: Я не вижу необходимости в псевдонимах F1 и F2 в приведенном выше фрагменте кода. Ссылка в первом соединении мы имеем пример использования метода SetDifference. –
Извините, я не могу четко заявить о своей проблеме. Я имею в виду, если у меня уже есть две сумки, как назвать UDF setDifference? В образце кода, похоже, предполагается, что он читается из файла с двумя пакетами. –