Spec-Zone.ru › Apache Pig 0.13

Начало работы

  • Настройка Pig
    • Требования
    • Загрузка Pig
    • Сборка Pig
  • Запуск Pig
    • Режимы выполнения
    • Интерактивный режим
    • Партионный режим
  • Операторы Pig Latin
    • Загрузка данных
    • Работа с данными
    • Хранение промежуточных результатов
    • Хранение конечных результатов
    • Отладка Pig Latin
  • Свойства Pig
  • Учебник Pig
    • Запуск скриптов Pig в локальном режиме
    • Запуск скриптов Pig в режиме Mapreduce
    • Файлы учебника Pig
    • Скрипт Pig 1: Популярность запросов
    • Скрипт Pig 2: Временная популярность запросов

Настройка Pig

Требования

Обязательные

Пользователям Unix и Windows необходимо следующее:

  • Hadoop 0.20.2, 020.203, 020.204, 0.20.205, 1.0.0, 1.0.1, или 0.23.0, 0.23.1 - http://hadoop.apache.org/common/releases.html (Вы можете запустить Pig с различными версиями Hadoop, задав переменную среды HADOOP_HOME, указывающую на каталог, где установлен Hadoop. Если вы не зададите HADOOP_HOME, по умолчанию Pig будет работать с встроенной версией, в настоящее время Hadoop 1.0.0.)
  • Java 1.6 - http://java.sun.com/javase/downloads/index.jsp (установите JAVA_HOME в корень вашей установки Java)

Пользователям Windows также необходимо установить Cygwin и пакет Perl: http://www.cygwin.com/

Необязательные

  • Python 2.5 - http://jython.org/downloads.html (при использовании Python UDF или интеграции Pig с Python)
  • JavaScript 1.7 - https://developer.mozilla.org/en/Rhino_downloads_archive и http://mirrors.ibiblio.org/pub/mirrors/maven2/rhino/js/ (при использовании JavaScript UDF или интеграции Pig с JavaScript)
  • JRuby 1.6.7 - http://www.jruby.org/download (при использовании JRuby UDF)
  • Groovy (groovy-all) 1.8.6 - http://groovy.codehaus.org/Download или напрямую на репозитории Maven http://mirrors.ibiblio.org/pub/mirrors/maven2/org/codehaus/groovy/groovy-all/1.8.6/ (при использовании Groovy UDF или интеграции Pig с Groovy)
  • Ant 1.7 - http://ant.apache.org/ (для сборки)
  • JUnit 4.5 - http://junit.sourceforge.net/ (для юнит-тестов)

Загрузка Pig

Чтобы получить дистрибутив Pig, выполните следующие действия:

  1. Загрузите последнюю стабильную версию с одного из зеркал Apache Download (см. Релизы Pig).
  2. Распакуйте загруженный дистрибутив Pig и обратите внимание на следующее:
    • Файл скрипта Pig, pig, расположен в каталоге bin (/pig-n.n.n/bin/pig). Переменные среды Pig описаны в файле скрипта Pig.
    • Файл свойств Pig, pig.properties, расположен в каталоге conf (/pig-n.n.n/conf/pig.properties). Вы можете указать альтернативное расположение с помощью переменной среды PIG_CONF_DIR.
  3. Добавьте /pig-n.n.n/bin в ваш путь. Используйте export (bash, sh, ksh) или setenv (tcsh, csh). Например:
    $ export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH
  4. Протестируйте установку Pig с помощью этой простой команды: $ pig -help

Сборка Pig

Чтобы собрать Pig, выполните следующие действия:

  1. Получите код Pig из SVN: svn co http://svn.apache.org/repos/asf/pig/trunk
  2. Соберите код из корневой директории: ant
    При успешной сборке вы увидите созданный файл pig.jar в той же директории.
  3. Проверьте pig.jar, запустив юнит-тест: ant test

Запуск Pig

Вы можете запустить Pig (выполнить операторы Pig Latin и команды Pig) в различных режимах.

Локальный режим Режим Mapreduce
Интерактивный режим да да
Партионный режим да да

Режимы выполнения

Pig имеет два режима выполнения или exectype:

  • Локальный режим - Для запуска Pig в локальном режиме вам нужен доступ к одному компьютеру; все файлы устанавливаются и выполняются с использованием вашего локального хоста и файловой системы. Укажите локальный режим с помощью флага -x (pig -x local). Обратите внимание, что локальный режим не поддерживает параллельное выполнение мапперов с Hadoop 0.20.x и 1.0.0. Это связано с тем, что LocalJobRunner этих версий Hadoop не потокобезопасен.
  • Режим Mapreduce - Для запуска Pig в режиме mapreduce вам нужен доступ к кластеру Hadoop и установке HDFS. Режим mapreduce является режимом по умолчанию; вы можете, но не обязаны, указать его с помощью флага -x (pig OR pig -x mapreduce).

Вы можете запустить Pig в любом режиме, используя команду "pig" (скрипт Perl bin/pig) или команду "java" (java -cp pig.jar ...).

Примеры

Этот пример демонстрирует, как запустить Pig в локальном и mapreduce режиме, используя команду pig.

/* local mode */
$ pig -x local ...
 
 
/* mapreduce mode */
$ pig ...
or
$ pig -x mapreduce ...

Этот пример демонстрирует, как запустить Pig в локальном и mapreduce режиме, используя команду java.

/* local mode */
$ java -cp pig.jar org.apache.pig.Main -x local ...


/* mapreduce mode */
$ java -cp pig.jar org.apache.pig.Main ...
or
$ java -cp pig.jar org.apache.pig.Main -x mapreduce ...

Интерактивный режим

Вы можете запустить Pig в интерактивном режиме, используя оболочку Grunt. Вызовите оболочку Grunt, используя команду "pig" (как показано ниже), а затем введите операторы Pig Latin и команды Pig интерактивно в командной строке.

Пример

Эти операторы Pig Latin извлекают все идентификаторы пользователей из файла /etc/passwd. Сначала скопируйте файл /etc/passwd в вашу рабочую директорию. Затем вызовите оболочку Grunt, набрав команду "pig" (в локальном или hadoop режиме). Затем введите операторы Pig Latin интерактивно в приглашении grunt (не забудьте включить точку с запятой после каждого оператора). Оператор DUMP отобразит результаты на вашем терминале.

grunt> A = load 'passwd' using PigStorage(':'); 
grunt> B = foreach A generate $0 as id; 
grunt> dump B; 

Локальный режим

$ pig -x local
... - Connecting to ...
grunt> 

Режим Mapreduce

$ pig -x mapreduce
... - Connecting to ...
grunt> 

or

$ pig 
... - Connecting to ...
grunt> 

Партионный режим

Вы можете запустить Pig в партионном режиме, используя скрипты Pig и команду "pig" (в локальном или hadoop режиме).

Пример

Операторы Pig Latin в скрипте Pig (id.pig) извлекают все идентификаторы пользователей из файла /etc/passwd. Сначала скопируйте файл /etc/passwd в вашу рабочую директорию. Затем запустите скрипт Pig из командной строки (в локальном или mapreduce режиме). Оператор STORE запишет результаты в файл (id.out).

/* id.pig */

A = load 'passwd' using PigStorage(':');  -- load the passwd file 
B = foreach A generate $0 as id;  -- extract the user IDs 
store B into ‘id.out’;  -- write the results to a file name id.out

Локальный режим

$ pig -x local id.pig

Режим Mapreduce

$ pig id.pig
or
$ pig -x mapreduce id.pig

Скрипты Pig

Используйте скрипты Pig для размещения операторов Pig Latin и команд Pig в одном файле. Хотя это не обязательно, рекомендуется указывать файл с расширением *.pig.

Вы можете запускать скрипты Pig из командной строки и из оболочки Grunt (см. команды run и exec).

Скрипты Pig позволяют передавать значения параметрам, используя замену параметров.

Комментарии в скриптах

Вы можете включать комментарии в скрипты Pig:

  • Для многострочных комментариев используйте /* …. */

  • Для однострочных комментариев используйте --

/* myscript.pig
My script is simple.
It includes three Pig Latin statements.
*/

A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float); -- loading data
B = FOREACH A GENERATE name;  -- transforming data
DUMP B;  -- retrieving results

Скрипты и распределенные файловые системы

Pig поддерживает запуск скриптов (и файлов Jar) которые хранятся в HDFS, Amazon S3 и других распределенных файловых системах. Требуется полный URI расположения скрипта (см. REGISTER для информации о файлах Jar). Например, чтобы запустить скрипт Pig в HDFS, выполните следующие действия:

$ pig hdfs://nn.mydomain.com:9020/myscripts/script.pig

Операторы Pig Latin

Выражения Pig Latin являются основными конструкциями, используемыми для обработки данных с помощью Pig. Выражение Pig Latin — это оператор, который принимает отношение в качестве входных данных и производит другое отношение в качестве выходных данных. (Это определение применимо ко всем операторам Pig Latin, за исключением LOAD и STORE, которые читают данные из и записывают данные в файловую систему.) Выражения Pig Latin могут содержать выражения и схемы. Выражения Pig Latin могут занимать несколько строк и должны заканчиваться точкой с запятой (;). По умолчанию выражения Pig Latin обрабатываются с помощью многозадачной обработки запросов.

Выражения Pig Latin, как правило, организуются следующим образом:

  • Оператор LOAD для чтения данных из файловой системы.

  • Последовательность операторов «преобразования» для обработки данных.

  • Оператор DUMP для просмотра результатов или оператор STORE для сохранения результатов.

Обратите внимание, что оператор DUMP или STORE необходим для генерации выходных данных.

  • В этом примере Pig проверит, но не выполнит операторы LOAD и FOREACH.

    A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
    B = FOREACH A GENERATE name;
    
  • В этом примере Pig проверит и выполнит операторы LOAD, FOREACH и DUMP.

    A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
    B = FOREACH A GENERATE name;
    DUMP B;
    (John)
    (Mary)
    (Bill)
    (Joe)
    

Загрузка данных

Используйте оператор LOAD и функции загрузки/хранения для чтения данных в Pig (PigStorage — функция загрузки по умолчанию).

Работа с данными

Pig позволяет преобразовывать данные различными способами. Для начала ознакомьтесь с этими операторами:

  • Используйте оператор FILTER для работы с кортежами или строками данных. Используйте оператор FOREACH для работы со столбцами данных.

  • Используйте оператор GROUP для группировки данных в одном отношении. Используйте операторы COGROUP, внутреннее соединение и внешнее соединение для группировки или соединения данных в двух или более отношениях.

  • Используйте оператор UNION для объединения содержимого двух или более отношений. Используйте оператор SPLIT для разбиения содержимого отношения на несколько отношений.

Хранение промежуточных результатов

Pig сохраняет промежуточные данные, генерируемые между задачами MapReduce, во временном месте на HDFS. Это место должно уже существовать на HDFS перед использованием. Это место может быть сконфигурировано с помощью свойства pig.temp.dir. Значение по умолчанию свойства — «/tmp», что соответствует жёстко заданному расположению в Pig 0.7.0 и более ранних версиях.

Хранение конечных результатов

Используйте оператор STORE и функции загрузки/хранения для записи результатов в файловую систему (PigStorage — функция хранения по умолчанию).

Примечание: Во время тестирования/отладки реализации вы можете использовать DUMP для отображения результатов на экране терминала. Однако в производственной среде всегда следует использовать оператор STORE для сохранения результатов (см. Хранение против вывода).

Отладка Pig Latin

Pig Latin предоставляет операторы, которые помогут вам отладить ваши выражения Pig Latin:

  • Используйте оператор DUMP для отображения результатов на экране терминала.

  • Используйте оператор DESCRIBE для просмотра схемы отношения.

  • Используйте оператор EXPLAIN для просмотра логических, физических или планов выполнения MapReduce для вычисления отношения.

  • Используйте оператор ILLUSTRATE для просмотра пошагового выполнения серии операторов.

Сокращения для отладки операторов

Pig предоставляет сокращения для часто используемых операторов отладки (DUMP, DESCRIBE, EXPLAIN, ILLUSTRATE). Эти сокращения можно использовать в оболочке Grunt или в скриптах Pig. Ниже приведены поддерживаемые Pig сокращения.

  • \d alias — сокращение для оператора DUMP. Если alias проигнорирован, используется последний определенный alias.

  • \de alias — сокращение для оператора DESCRIBE. Если alias проигнорирован, используется последний определенный alias.

  • \e alias — сокращение для оператора EXPLAIN. Если alias проигнорирован, используется последний определенный alias.

  • \i alias — сокращение для оператора ILLUSTRATE. Если alias проигнорирован, используется последний определенный alias.

  • \q — для выхода из оболочки grunt

Свойства Pig

Pig поддерживает ряд свойств Java, которые вы можете использовать для настройки поведения Pig. Вы можете получить список свойств, используя команду help properties. Все эти свойства необязательны; ни одно не является обязательным.

Для указания свойств Pig используйте один из этих методов:

  • Файл pig.properties (добавить директорию, содержащую файл pig.properties, в путь к классам)
  • Вариант командной строки -D и свойство Pig (pig -Dpig.tmpfilecompression=true)
  • Вариант командной строки -P и файл свойств (pig -P mypig.properties)
  • Команда set (set pig.exec.nocombiner true)

Примечание: Файл свойств использует стандартный формат файла свойств Java.

Поддерживается следующий порядок приоритетов: pig.properties < -D Свойство Pig < -P файл свойств < команда set. Это означает, что если одно и то же свойство предоставлено с помощью варианта командной строки –D, а также с помощью варианта командной строки –P (файл свойств), значение свойства в файле свойств будет иметь приоритет.

Для указания свойств Hadoop вы можете использовать те же методы:

  • Конфигурационные файлы Hadoop (включая pig-cluster-hadoop-site.xml)
  • Вариант командной строки -D и свойство Hadoop (pig –Dmapreduce.task.profile=true)
  • Вариант командной строки -P и файл свойств (pig -P property_file)
  • Команда set (set mapred.map.tasks.speculative.execution false)

Поддерживается тот же порядок приоритетов: Конфигурационные файлы Hadoop < -D Свойство Hadoop < -P файл_свойств < команда set.

Свойства Hadoop не интерпретируются Pig, а передаются напрямую Hadoop. Любое свойство Hadoop может быть передано таким образом.

Все свойства, которые собирает Pig, включая свойства Hadoop, доступны любому UDF через объект UDFContext. Для доступа к свойствам можно вызвать метод getJobConf.

Учебник по Pig

Урок Pig демонстрирует, как запускать скрипты Pig с использованием локального режима Pig и режима mapreduce (см. Режимы выполнения).

Для начала выполните следующие предварительные действия:

  1. Убедитесь, что переменная среды JAVA_HOME установлена в корень вашей Java установки.
  2. Убедитесь, что ваша переменная PATH включает bin/pig (это позволит вам запускать учебники с помощью команды "pig").
    $ export PATH=/<my-path-to-pig>/pig-0.9.0/bin:$PATH 
    
  3. Установите переменную среды PIG_HOME:
    $ export PIG_HOME=/<my-path-to-pig>/pig-0.9.0 
    
  4. Создайте файл pigtutorial.tar.gz:
    • Перейдите в каталог учебника Pig (.../pig-0.9.0/tutorial).
    • Отредактируйте файл build.xml в каталоге учебника.
      Change this:   <property name="pigjar" value="../pig.jar" />
      To this:       <property name="pigjar" value="../pig-0.9.0-core.jar" />
      
    • Запустите команду "ant" из каталога учебника. Это создаст файл pigtutorial.tar.gz.
  5. Скопируйте файл pigtutorial.tar.gz из каталога учебника Pig в свой локальный каталог.
  6. Разархивируйте файл pigtutorial.tar.gz.
    $ tar -xzf pigtutorial.tar.gz
    
  7. Создается новый каталог с именем pigtmp. Этот каталог содержит Файлы учебника Pig. Эти файлы работают с Hadoop 0.20.2 и включают все необходимое для запуска Скрипта Pig 1 и Скрипта Pig 2.

Запуск скриптов Pig в локальном режиме

Для запуска скриптов Pig в локальном режиме выполните следующие действия:

  1. Перейдите в каталог pigtmp.
  2. Выполните следующую команду (используя либо script1-local.pig, либо script2-local.pig).
    $ pig -x local script1-local.pig
    
  3. Просмотрите файлы результатов, расположенные в каталоге part-r-00000.

    Вывод может содержать несколько предупреждений Hadoop, которые можно игнорировать:

    2010-04-08 12:55:33,642 [main] INFO  org.apache.hadoop.metrics.jvm.JvmMetrics 
    - Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
    

Запуск скриптов Pig в режиме Mapreduce

Для запуска скриптов Pig в режиме mapreduce выполните следующие действия:

  1. Перейдите в каталог pigtmp.
  2. Скопируйте файл excite.log.bz2 из каталога pigtmp в каталог HDFS.
    $ hadoop fs –copyFromLocal excite.log.bz2 .
    
  3. Установите переменную среды PIG_CLASSPATH в местоположение каталога конфигурации кластера (каталог, содержащий файлы core-site.xml, hdfs-site.xml и mapred-site.xml):
    export PIG_CLASSPATH=/mycluster/conf
    

    Примечание: Переменная PIG_CLASSPATH также может быть использована для добавления любых других зависимостей сторонних разработчиков или файлов ресурсов, которые может потребовать скрипт Pig. Если также необходимо обеспечить, чтобы добавленные записи имели наивысший приоритет в порядке расположения в классе JVM Pig, можно установить переменную среды PIG_USER_CLASSPATH_FIRST в любое значение, например, 'true' (и сбросить переменную среды, чтобы отключить ее).

  4. Установите переменную среды HADOOP_CONF_DIR в местоположение каталога конфигурации кластера:
    export HADOOP_CONF_DIR=/mycluster/conf
    
  5. Выполните следующую команду (используя либо script1-hadoop.pig, либо script2-hadoop.pig):
    $ pig script1-hadoop.pig
    
  6. Просмотрите файлы результатов, расположенные в каталоге HDFS script1-hadoop-results или script2-hadoop-results:
    $ hadoop fs -ls script1-hadoop-results
    $ hadoop fs -cat 'script1-hadoop-results/*' | less
    

Файлы учебника Pig

Здесь описано содержимое файла учебника Pig (pigtutorial.tar.gz).

Файл

Описание

pig.jar

Файл JAR Pig

tutorial.jar

Пользовательские функции (UDFs) и классы Java

script1-local.pig

Скрипт Pig 1, Популярность запросов (локальный режим)

script1-hadoop.pig

Скрипт Pig 1, Популярность запросов (режим mapreduce)

script2-local.pig

Скрипт Pig 2, Временная популярность запросов (локальный режим)

script2-hadoop.pig

Скрипт Pig 2, Временная популярность запросов (режим mapreduce)

excite-small.log

Файл журнала, поисковая система Excite (локальный режим)

excite.log.bz2

Файл журнала, поисковая система Excite (режим mapreduce)

Пользовательские функции (UDFs) описаны здесь.

UDF

Описание

ExtractHour

Извлекает час из записи.

NGramGenerator

Создает n-граммы из набора слов.

NonURLDetector

Удаляет запись, если поле запроса пустое или является URL.

ScoreGenerator

Вычисляет «популярность» n-граммы.

ToLower

Изменяет поле запроса на нижний регистр.

TutorialUtil

Разделяет строку запроса на набор слов.

Скрипт Pig 1: Популярность поисковых фраз

Скрипт «Популярность поисковых фраз» (script1-local.pig или script1-hadoop.pig) обрабатывает файл журнала поисковых запросов из поисковой системы Excite и находит поисковые фразы, которые появляются с высокой частотой в определенное время суток.

Скрипт представлен здесь:

  • Зарегистрировать файл JAR учебника, чтобы можно было вызывать включенные UDF в скрипте.

REGISTER ./tutorial.jar; 
  • Используйте функцию PigStorage для загрузки файла журнала excite (excite.log или excite-small.log) в «сырой» пакет как массив записей с полями user, time и query.

raw = LOAD 'excite.log' USING PigStorage('\t') AS (user, time, query);
  • Вызовите UDF NonURLDetector для удаления записей, если поле запроса пустое или является URL.

clean1 = FILTER raw BY org.apache.pig.tutorial.NonURLDetector(query);
  • Вызовите UDF ToLower для изменения поля запроса на нижний регистр.

clean2 = FOREACH clean1 GENERATE user, time, org.apache.pig.tutorial.ToLower(query) as query;
  • Поскольку файл журнала содержит только запросы за один день, нас интересует только час. Формат временной метки журнала запросов excite — YYMMDDHHMMSS. Вызовите UDF ExtractHour для извлечения часа (HH) из поля time.

houred = FOREACH clean2 GENERATE user, org.apache.pig.tutorial.ExtractHour(time) as hour, query;
  • Вызовите UDF NGramGenerator для составления n-грамм запроса.

ngramed1 = FOREACH houred GENERATE user, hour, flatten(org.apache.pig.tutorial.NGramGenerator(query)) as ngram;
  • Используйте оператор DISTINCT для получения уникальных n-грамм для всех записей.

ngramed2 = DISTINCT ngramed1;
  • Используйте оператор GROUP для группировки записей по n-грамме и часу.

hour_frequency1 = GROUP ngramed2 BY (ngram, hour);
  • Используйте функцию COUNT для получения подсчета (вхождений) каждой n-граммы.

hour_frequency2 = FOREACH hour_frequency1 GENERATE flatten($0), COUNT($1) as count;
  • Используйте оператор GROUP для группировки записей только по n-грамме. Теперь каждая группа соответствует уникальной n-грамме и содержит подсчет для каждого часа.

uniq_frequency1 = GROUP hour_frequency2 BY group::ngram;
  • Для каждой группы определите час, в котором эта n-грамма используется с высокой частотой. Вызовите UDF ScoreGenerator для вычисления «популярности» n-граммы.

uniq_frequency2 = FOREACH uniq_frequency1 GENERATE flatten($0), flatten(org.apache.pig.tutorial.ScoreGenerator($1));
  • Используйте оператор FOREACH-GENERATE для присвоения имен полям.

uniq_frequency3 = FOREACH uniq_frequency2 GENERATE $1 as hour, $0 as ngram, $2 as score, $3 as count, $4 as mean;
  • Используйте оператор FILTER для удаления всех записей с оценкой меньше или равной 2,0.

filtered_uniq_frequency = FILTER uniq_frequency3 BY score > 2.0;
  • Используйте оператор ORDER для сортировки оставшихся записей по часу и оценке.

ordered_uniq_frequency = ORDER filtered_uniq_frequency BY hour, score;
  • Используйте функцию PigStorage для сохранения результатов. Выходной файл содержит список n-грамм со следующими полями: час, ngram, оценка, подсчет, среднее значение.

STORE ordered_uniq_frequency INTO '/tmp/tutorial-results' USING PigStorage(); 

Скрипт Pig 2: Временная популярность поисковых фраз

Скрипт «Временная популярность поисковых фраз» (script2-local.pig или script2-hadoop.pig) обрабатывает файл журнала поисковых запросов из поисковой системы Excite и сравнивает частоту появления поисковых фраз в двух временных интервалах, разделенных на 12 часов.

Скрипт представлен здесь:

  • Зарегистрировать файл JAR учебника, чтобы можно было вызывать пользовательские функции (UDFs) в скрипте.

REGISTER ./tutorial.jar;
  • Используйте функцию PigStorage для загрузки файла журнала excite (excite.log или excite-small.log) в «сырой» пакет как массив записей с полями user, time и query.

raw = LOAD 'excite.log' USING PigStorage('\t') AS (user, time, query);
  • Вызовите UDF NonURLDetector для удаления записей, если поле запроса пустое или является URL.

clean1 = FILTER raw BY org.apache.pig.tutorial.NonURLDetector(query);
  • Вызовите UDF ToLower для изменения поля запроса на нижний регистр.

clean2 = FOREACH clean1 GENERATE user, time, org.apache.pig.tutorial.ToLower(query) as query;
  • Поскольку файл журнала содержит только запросы за один день, нас интересует только час. Формат временной метки журнала запросов excite — YYMMDDHHMMSS. Вызовите UDF ExtractHour для извлечения часа из поля time.

houred = FOREACH clean2 GENERATE user, org.apache.pig.tutorial.ExtractHour(time) as hour, query;
  • Вызовите UDF NGramGenerator для составления n-грамм запроса.

ngramed1 = FOREACH houred GENERATE user, hour, flatten(org.apache.pig.tutorial.NGramGenerator(query)) as ngram;
  • Используйте оператор DISTINCT для получения уникальных n-грамм для всех записей.

ngramed2 = DISTINCT ngramed1;
  • Используйте оператор GROUP для группировки записей по n-грамме и часу.

hour_frequency1 = GROUP ngramed2 BY (ngram, hour);
  • Используйте функцию COUNT для получения подсчета (вхождений) каждой n-граммы.

hour_frequency2 = FOREACH hour_frequency1 GENERATE flatten($0), COUNT($1) as count;
  • Используйте оператор FOREACH-GENERATE для присвоения имен полям.

hour_frequency3 = FOREACH hour_frequency2 GENERATE $0 as ngram, $1 as hour, $2 as count;
  • Используйте оператор FILTER для получения n-грамм для часа ‘00’

hour00 = FILTER hour_frequency2 BY hour eq '00';
  • Используйте оператор FILTER для получения n-грамм для часа ‘12’

hour12 = FILTER hour_frequency3 BY hour eq '12';
  • Используйте оператор JOIN для получения n-грамм, которые встречаются в обоих часах.

same = JOIN hour00 BY $0, hour12 BY $0;
  • Используйте оператор FOREACH-GENERATE для записи их частоты.

same1 = FOREACH same GENERATE hour_frequency2::hour00::group::ngram as ngram, $2 as count00, $5 as count12;
  • Используйте функцию PigStorage для сохранения результатов. Выходной файл содержит список n-грамм со следующими полями: ngram, count00, count12.

STORE same1 INTO '/tmp/tutorial-join-results' USING PigStorage();

© 2007–2016 Apache Software Foundation
Licensed under the Apache Software License version 2.0.
https://pig.apache.org/docs/r0.13.0/start.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API