Apache Pig UDF: Часть 3 - Функции магазина



В этом посте рассказывается о Apache Pig UDF - Store Functions. (Apache Pig UDF: Часть 3). Взгляните на функции магазина Apache Pig UDF.

Абстрактный класс StoreFunc имеет основные методы для хранения данных, и для большинства случаев использования его достаточно расширить. Существует дополнительный интерфейс, который можно реализовать для расширения функциональности:





StoreMetadata

В этом интерфейсе есть методы взаимодействия с системами метаданных для хранения схемы и статистики. Этот интерфейс не является обязательным и должен быть реализован только в том случае, если необходимо сохранить метаданные.

Ниже описаны методы, которые необходимо переопределить в StoreFunc:



  • getOutputFormat ():

    Этот метод будет вызван Pig для получения OutputFormat, используемого Storer. Методы в OutputFormat будут вызываться Pig таким же образом и в том же контексте, что и Hadoop в Java-программе с уменьшением карты. Если OutputFormat является упакованным в Hadoop, реализация должна использовать новый API, основанный на org.apache.hadoop.mapreduce. Если это настраиваемый формат вывода, его следует реализовать с использованием нового API в каталоге org.apache.hadoop.mapreduce. Метод checkOutputSpecs () OutputFormat будет вызываться pig для предварительной проверки местоположения вывода. Этот метод также будет вызываться как часть последовательности вызовов Hadoop при запуске задания. Таким образом, реализации должны гарантировать, что этот метод можно вызывать несколько раз без противоречивых побочных эффектов.

  • setStoreLocation ():

    Этот метод вызывается Pig для передачи информации о местонахождении магазина продавцу. Хранитель должен использовать этот метод для передачи той же информации в базовый OutputFormat. Этот метод вызывается программой Pig несколько раз. Реализации должны принять к сведению, что этот метод вызывается несколько раз и должен гарантировать отсутствие противоречивых побочных эффектов из-за нескольких вызовов.

  • prepareToWrite ():

    В новом API запись данных осуществляется через OutputFormat, предоставляемый StoreFunc. В prepareToWrite () RecordWriter, связанный с OutputFormat, предоставленным StoreFunc, передается в StoreFunc. Затем RecordWriter может использоваться реализацией в putNext () для записи кортежа, представляющего запись данных способом, ожидаемым RecordWriter.

  • putNext ():

    Значение putNext () не изменилось и вызывается средой выполнения Pig для записи следующего кортежа данных - в новом API это метод, в котором реализация будет использовать базовый RecordWriter для записи кортежа.

Реализации по умолчанию в StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Этот метод будет вызываться Pig как во внешнем, так и во внутреннем интерфейсе, чтобы передать уникальную подпись Storer. Подпись может использоваться для хранения любой информации в UDFContext, которую Storer должен сохранять между вызовами различных методов во внешнем и внутреннем интерфейсе. Реализация по умолчанию в StoreFunc имеет пустое тело. Этот метод будет вызываться перед любыми другими методами.

  • relToAbsPathForStoreLocation ():

    Среда выполнения Pig вызовет этот метод, чтобы позволить Storer преобразовать относительное расположение магазина в абсолютное. Реализация предоставляется в StoreFunc, которая обрабатывает это для местоположений на основе файловой системы.

  • checkSchema ():

    Функция Store должна реализовать эту функцию, чтобы проверить, что данная схема, описывающая записываемые данные, приемлема для нее. Реализация по умолчанию в StoreFunc имеет пустое тело. Этот метод будет вызываться перед любыми вызовами setStoreLocation ().

Пример реализации:

Реализация хранилища в примере - это хранилище текстовых данных с разделителем строк как '
‘И‘ ‘как разделитель полей по умолчанию (который можно переопределить, передав другой разделитель полей в конструкторе) - это аналогично текущему хранилищу PigStorage в Pig. Реализация использует существующий формат вывода, поддерживаемый Hadoop - TextOutputFormat в качестве базового формата вывода.

открытый класс SimpleTextStorer расширяет StoreFunc {protected RecordWriter writer = null private byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (разделитель строк) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' прервать регистр 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () прервать регистр ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} else {throw new RuntimeException (' Разделитель PigStorage должен быть single character ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) выдает исключение IOException {int sz = f.size () for (int i = 0 i

Есть вопрос к нам? Укажите их в комментариях, и мы свяжемся с вами.

Похожие сообщения:



Apache Pig UDF: Часть 2
Apache Pig UDF: Часть 1