Сегодняшний пост посвящен функциям загрузки в Apache Pig. Это продолжение первый пост который охватывает такие функции UDF, как Eval, Filter и Aggregate. Пожалуйста, вернитесь к ним для получения дополнительной информации о других функциях Pig UDF.
Функция загрузки Pig построена на основе Hadoop InputFormat, класса, который Hadoop использует для чтения данных. InputFormat имеет две цели: он определяет, как входные данные будут фрагментированы между задачами карты, и предоставляет RecordReader, который приводит к парам ключ-значение в качестве входных данных для этих задач карты. Базовым классом для функции загрузки является LoadFunc.
Функция нагрузки - классификация:
В абстрактном классе LoadFunc есть три основных метода загрузки данных, и в большинстве случаев его достаточно расширить. Есть еще три дополнительных интерфейса, которые можно реализовать для расширения функциональности:
LoadMetadata:
LoadMetadata имеет методы для работы с метаданными. Большинству загрузчиков не нужно реализовывать это, если они не взаимодействуют с системой метаданных. Метод getSchema () в этом интерфейсе предлагает способ реализации загрузчика для передачи схемы данных обратно в Pig. Если реализация загрузчика возвращает данные, состоящие из полей реальных типов, она должна предоставить схему, описывающую данные, возвращаемые методом getSchema (). Другие методы работают с другими типами метаданных, такими как ключи разделов и статистика. Реализации могут возвращать нулевые возвращаемые значения для этих методов, если они недопустимы для другой реализации.
LoadPushDown:
LoadPushDown имеет разные методы для передачи операций из среды выполнения Pig в реализации загрузчика. В настоящее время Pig вызывает только метод pushProjection () для передачи загрузчику точных полей, которые требуются в сценарии Pig. Реализация загрузчика может выбрать, выполнять или не выполнять запрос. Если реализация загрузчика решает выполнить запрос, она должна реализовать LoadPushDown, чтобы повысить производительность запроса.
как запустить aws cli
pushProjection ():
Этот метод сообщает LoadFunc, какие поля необходимы в скрипте Pig. Таким образом, позволяя LoadFunc повысить производительность, загружая только необходимые поля. pushProjection () принимает «requiredFieldList». «requiredFieldList» доступен только для чтения и не может быть изменен с помощью LoadFunc. «RequiredFieldList» включает список «requiredField», где каждое «requiredField» указывает поле, требуемое сценарием Pig, и состоит из индекса, псевдонима, типа и подполей. Pig использует индекс столбца requiredField.index для связи с LoadFunc о полях, необходимых для сценария Pig. Если обязательным полем является карта, Pig передаст «requiredField.subFields», который содержит список ключей, требуемых скриптами Pig для карты.
LoadCaster:
В LoadCaster есть методы преобразования байтовых массивов в определенные типы. Реализация загрузчика должна реализовывать это, когда необходимо поддерживать неявное или явное приведение полей DataByteArray к другим типам.
Абстрактный класс LoadFunc - это основной класс, расширяемый для реализации загрузчика. Ниже описаны методы, которые необходимо переопределить:
getInputFormat ():
Этот метод вызывается Pig, чтобы получить InputFormat, используемый загрузчиком. Методы в InputFormat вызываются Pig так же, как Hadoop в Java-программе MapReduce. Если InputFormat является упакованным в Hadoop, реализация должна использовать новый API, основанный на org.apache.hadoop.mapreduce. Если это настраиваемый InputFormat, лучше реализовать его с помощью нового API в org.apache.hadoop.mapreduce.
setLocation ():
Этот метод вызывается Pig, чтобы сообщить загрузчику местоположение загрузки. Загрузчику необходимо использовать этот метод для передачи той же информации в основной InputFormat. Свинья вызывает этот метод несколько раз.
prepareToRead ():
В этом методе RecordReader, связанный с InputFormat, предоставленным LoadFunc, передается в LoadFunc. RecordReader теперь может использоваться реализацией в getNext () для возврата кортежа, представляющего запись данных, обратно в Pig.
getNext ():
Значение getNext () не изменилось и вызывается средой выполнения Pig для получения следующего кортежа в данных. В этом методе реализация должна использовать базовый RecordReader и создать кортеж для возврата.
Реализации по умолчанию в LoadFunc:
Обратите внимание, что реализации по умолчанию в LoadFunc следует переопределять только при необходимости.
план мониторинга и контроля проекта
setUdfContextSignature ():
Этот метод будет вызываться Pig как во внешнем, так и во внутреннем интерфейсе, чтобы передать уникальную подпись загрузчику. Подпись может использоваться для хранения любой информации в UDFContext, которую Загрузчик должен сохранять между вызовами различных методов во внешнем и внутреннем интерфейсе. Пример использования - сохранить переданный ему RequiredFieldList в LoadPushDown.pushProjection (RequiredFieldList) для использования в серверной части перед возвратом кортежей в getNext (). Реализация по умолчанию в LoadFunc имеет пустое тело. Этот метод будет вызываться перед другими методами.
relativeToAbsolutePath ():
Среда выполнения Pig вызовет этот метод, чтобы разрешить загрузчику преобразовать относительное местоположение загрузки в абсолютное местоположение. Реализация по умолчанию, представленная в LoadFunc, обрабатывает это для местоположений файловой системы. Если источником загрузки является что-то другое, реализация загрузчика может переопределить это.
Реализация загрузчика в примере - это загрузчик текстовых данных с разделителем строк как '
‘И‘ ‘как разделитель полей по умолчанию, аналогичный текущему загрузчику PigStorage в Pig. Реализация использует существующий формат ввода, поддерживаемый Hadoop, - TextInputFormat - в качестве базового формата ввода.
открытый класс SimpleTextLoader расширяет LoadFunc {защищенный RecordReader in = null закрытый байт fieldDel = '' закрытый ArrayList mProtoTuple = null закрытый TupleFactory mTupleFactory = TupleFactory.getInstance () частный статический окончательный int BUFFER_SIZE = 1024 общедоступный ** SimpleTextLoader () {} Загрузчик Pig, использующий указанный символ в качестве разделителя полей. * * @param delimiter * однобайтовый символ, используемый для разделения полей. * ('' по умолчанию.) * / public SimpleTextLoader (String delimiter) {this () if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if ( delimiter.length ()> 1 & & delimiter.charAt (0) == '') {переключатель (delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x' : fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case 'u': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: throw new RuntimeException ('Unknown delimiter' + delimiter)}} else {throw new RuntimeException ('PigStorage delimeter must be single character')}} @Override public Tuple getNext () выбрасывает IOException {try {boolean notDone = in.nextKeyValue () если (notDone) {return null} Текстовое значение = (Текст) in.getCurrentValue () byte [] buf = value.getBytes () int len = value.getLength () int start = 0 for (int i = 0 iЕсть вопрос к нам? Пожалуйста, укажите это в комментариях, и мы свяжемся с вами.
Похожие сообщения: