я столкнулся два вопроса:Проблемы генерации заказанных файлов Свинья
Report Files
Я генерирующий отчет PIG. Выходной файл которого входит в несколько файлов: part-r-00000, part-r-00001, ... (Это связано с тем же отношением, только несколько картографов производят данные. Таким образом, существует несколько файлов.):
B = FOREACH A GENERATE col1,col2,col3; STORE B INTO $output USING PigStorage(',');
Я хотел бы все это в конечном итоге в одном отчете, так что я в конечном итоге делает это перед сохранением результата, используя
HBaseStorage
, я сортировка их с помощью параллельного 1:report = ORDER report BY col1 PARALLEL1
. Другими словами, я принуждая количество переходников до 1, и, следовательно, генерирует один файл следующим образом:B = FOREACH A GENERATE col1,col2,col3; B = ORDER B BY col1 PARALLEL 1; STORE B INTO $output USING PigStorage(',');
Есть ли лучший способ генерации одного выходного файла?
Group By
У меня есть несколько отчетов, которые выполняют группу-по:
grouped = GROUP data BY col
, если я не говоря ужеparallel 1
иногда PIG решает использовать несколько восстановителей в группу результата. Когда я суммирую или подсчитываю данные, получаю неправильные результаты. Например:Вместо того, чтобы видеть это:
part-r-00000: grouped_col_val_1, 5, 6 grouped_col_val_2, 1, 1 part-r-00001: grouped_col_val_1, 3, 4 grouped_col_val_2, 5, 5
Я должен видеть:
part-r-00000: grouped_col_val_1, 8, 10 grouped_col_val_2, 6, 6
Так что я в конечном итоге делает мою группу следующим образом:
grouped = GROUP data BY col PARALLEL 1
тогда я вижу правильный результат.У меня такое чувство, что я чего-то не хватает.
Вот псевдо-код, как я делаю группировку:
raw = LOAD '$path' USING PigStorage... row = FOREACH raw GENERATE id, val grouped = GROUP row BY id; report = FOREACH grouped GENERATE group as id, SUM(val) STORE report INTO '$outpath' USING PigStorage...
См. Мой новый ответ. BTW, я не хочу быть nitpicky, но это «псевдокод», а не «sudo-code» (если только вы не ссылаетесь на выполнение кода с разрешения суперпользователя!). – cabad
Вы используете пользовательский разделитель? Это может повлиять на ваши результаты; см. мой ответ для деталей. – cabad
@cabad - Я видел ваше обновление, я не использую пользовательский разделитель. Я группирую несколько столбцов ... вот и все. – hba