СОХРАНИТЬ вывод на один CSV? - PullRequest
14 голосов
/ 28 марта 2012

В настоящее время, когда я сохраняю HDFS, он создает много файлов деталей.

Есть ли способ сохранить в один файл CSV?

Ответы [ 2 ]

17 голосов
/ 29 марта 2012

Вы можете сделать это несколькими способами:

  • Чтобы установить число редукторов для всех операций Pig, вы можете использовать свойство default_parallel - но это означает, что каждый шаг будет использовать один редуктор, уменьшая пропускную способность:

    set default_parallel 1;

  • До вызова STORE, если выполняется одна из операций (COGROUP, CROSS, DISTINCT, GROUP, JOIN (внутренняя), JOIN (внешняя) и ORDER BY), тогда вы можете использовать PARALLEL 1 ключевое слово для обозначения использования одного редуктора для выполнения этой команды:

    GROUP a BY grp PARALLEL 1;

См. Свинья поваренная книга - параллельные функции для получения дополнительной информации

15 голосов
/ 25 декабря 2013

Вы также можете использовать команду getmerge Hadoop для объединения всех этих файлов part- *. Это возможно только в том случае, если вы запускаете ваши сценарии Pig из оболочки Pig (а не из Java).

Это преимущество по сравнению с предлагаемым решением: поскольку вы по-прежнему можете использовать несколько редукторов для обработки данных, ваша работа может выполняться быстрее, особенно если каждый редуктор выводит несколько данных.

grunt> fs -getmerge  <Pig output file> <local file>
...