форматы файлов, которые можно прочитать с помощью PIG - PullRequest
5 голосов
/ 25 января 2012

Какие форматы файлов можно прочитать с помощью PIG?

Как я могу хранить их в разных форматах? Скажем, у нас есть файл CSV, и я хочу сохранить его как файл MXL, как это можно сделать? Всякий раз, когда мы используем команду STORE, она создает каталог и сохраняет файл как part-m-00000. Как мне изменить имя файла и перезаписать каталог?

1 Ответ

6 голосов
/ 25 января 2012

Какие форматы файлов можно прочитать с помощью PIG? как я могу хранить их в разных форматах?

Существует несколько встроенных методов загрузки и хранения , но они ограничены:

  • BinStorage - «бинарное» хранилище
  • PigStorage - загружает и сохраняет данные, разделенные чем-либо (например, табуляцией или запятой)
  • TextLoader - строка за строкой загружает данные (т. Е. Разделяется символом новой строки)

piggybank - это библиотека пользовательских функций, предоставленных сообществом, и имеет ряд методов загрузки и хранения , которые включают загрузчик XML, но не хранитель XML.


скажем, у нас есть файл CSV и я хочу сохранить его как файл MXL, как это можно сделать?

Я предполагаю, что вы имеете в виду XML здесь ... Хранение в XML - это что-то немного грубое в Hadoop, потому что оно разбивает файлы по принципу редуктора, так как вы знаете, где разместить корневой тег? скорее всего, это должна быть какая-то постобработка для получения хорошо сформированного XML.

Одна вещь, которую вы можете сделать, это написать UDF , который преобразует ваши столбцы в строку XML:

B = FOREACH A GENERATE customudfs.DataToXML(col1, col2, col3);

Например, скажем, col1, col2, col3 равны "foo", 37, "lemons" соответственно. Ваш UDF может вывести строку "<item><name>Foo</name><num>37</num><fruit>lemons</fruit></item>".


всякий раз, когда мы используем команду STORE, она создает каталог и сохраняет файл как part-m-00000. Как я могу изменить имя файла и перезаписать каталог?

Вы не можете изменить имя выходного файла на другое, отличное от part-m-00000. Вот как работает Hadoop. Если вы хотите изменить его название, вы должны сделать что-то после факта с чем-то вроде hadoop fs -mv output/part-m-00000 newoutput/myoutputfile. Это можно сделать с помощью сценария bash, который запускает сценарий pig и затем выполняет эту команду.

...