Как хранить сжатые файлы с помощью PigStorage в Apache Pig? - PullRequest
10 голосов
/ 11 февраля 2011

Apache Pig v0.7 может читать сжатые файлы без особых усилий с моей стороны, например:

MyData = LOAD '/tmp/data.csv.gz' USING PigStorage(',') AS (timestamp, user, url);

Я могу обработать эти данные и вывести их на диск, все в порядке:

PerUser = GROUP MyData BY user;
UserCount = FOREACH PerUser GENERATE group AS user, COUNT(MyData) AS count;
STORE UserCount INTO '/tmp/usercount' USING PigStorage(',');

Но выходной файл не сжат:

/tmp/usercount/part-r-00000

Есть ли способ указать команде STORE выводить содержимое в формате gzip?Обратите внимание, что в идеале я хотел бы получить ответ, применимый к Pig 0.6, поскольку я хочу использовать Amazon Elastic MapReduce;но если есть решение для любой версии Pig, я бы хотел услышать это.

Ответы [ 3 ]

14 голосов
/ 27 ноября 2012

Есть два способа:

  1. Как упомянуто выше в хранилище, вы можете сказать выходной каталог как

    usercount.gz STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');

  2. Установить метод сжатия в вашем скрипте.

    set output.compression.enabled true; set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;

10 голосов
/ 24 февраля 2011

Для Pig r0.8.0 ответ так же прост, как дать вашему выходному пути расширение ".gz" (или ".bz", если вы предпочитаете bzip).

Последняя строка вашего кода должнаизменить следующим образом:

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');

В соответствии с вашим примером, ваш выходной файл будет найден как

/tmp/usercount.gz/part-r-00000.gz

Для получения дополнительной информации см .: https://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#PigStorage

3 голосов
/ 12 мая 2015

В соответствии с документацией Pig для PigStorage , есть 2 способа сделать это

Задание формата сжатия с помощью инструкции 'STORE'

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');
STORE UserCount INTO '/tmp/usercount.bz2' USING PigStorage(',');
STORE UserCount INTO '/tmp/usercount.lzo' USING PigStorage(',');

Уведомлениевышеуказанные утверждения.Pig поддерживает 3 формата сжатия: GZip, BZip2 и LZO.Чтобы заставить LZO работать, вы должны установить его отдельно.См. здесь для получения дополнительной информации о lzo.

Задание сжатия через свойства задания

Путем установки следующих свойств в вашем скрипте pig, например, output.compression.enabled и output.compression.codec черезследующий код

set output.compression.enabled true;

и

set output.compression.codec com.hadoop.compression.lzo.LzopCodec;
set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;
set output.compression.codec org.apache.hadoop.io.compress.BZip2Codec;
...