Начало работы
Настройка Pig
Требования
Обязательные
Пользователям Unix и Windows необходимо следующее:
- Hadoop 0.23.X, 1.X или 2.X - http://hadoop.apache.org/common/releases.html (Вы можете запускать Pig с различными версиями Hadoop, установив переменную среды HADOOP_HOME, указывающую на каталог, где установлен Hadoop. Если переменная HADOOP_HOME не установлена, по умолчанию Pig будет работать с встроенной версией, в настоящее время Hadoop 1.0.4.)
- Java 1.7 - http://java.sun.com/javase/downloads/index.jsp (установите JAVA_HOME в корень вашей установки Java)
Необязательные
- Python 2.7 - https://www.python.org (при использовании потоковых Python UDF)
- Ant 1.8 - http://ant.apache.org/ (для сборки)
Загрузка Pig
Для получения дистрибутива Pig выполните следующие действия:
- Загрузите последнюю стабильную версию с одного из зеркал загрузки Apache (см. Выпуск Pig).
- Распакуйте загруженный дистрибутив 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.
- Добавьте /pig-n.n.n/bin в ваш путь. Используйте export (bash,sh,ksh) или setenv (tcsh,csh). Например:
$ export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH - Проверьте установку Pig с помощью этой простой команды: $ pig -help
Сборка Pig
Для сборки Pig выполните следующие действия:
- Получите код Pig из SVN: svn co http://svn.apache.org/repos/asf/pig/trunk
- Соберите код из корневого каталога: ant
При успешной сборке должен быть создан файл pig.jar в этом каталоге. - Проверьте pig.jar, выполнив тест единиц: ant test
- Если вы используете Hadoop 0.23.X или 2.X, добавьте -Dhadoopversion=23 в вашу командную строку ant в предыдущих шагах
Запуск Pig
Вы можете запустить Pig (выполнить операторы Pig Latin и команды Pig) в различных режимах.
| Локальный режим | Тезовый локальный режим | Режим Mapreduce | Режим Tez | |
| Интерактивный режим | да | экспериментальный | да | да |
| Режим пакетной обработки | да | экспериментальный | да | да |
Режимы выполнения
Pig имеет два режима выполнения или exectypes:
- Локальный режим - Для запуска Pig в локальном режиме вам нужен доступ к одному компьютеру; все файлы устанавливаются и выполняются на вашем локальном хосте и файловой системе. Укажите локальный режим, используя флаг -x (pig -x local).
- Тезовый локальный режим - Для запуска Pig в локальном режиме Tez. Он похож на локальный режим, за исключением того, что внутренне Pig вызовет движок выполнения Tez. Укажите локальный режим Tez, используя флаг -x (pig -x tez_local).
Примечание: Тезовый локальный режим является экспериментальным. Существуют некоторые запросы, которые просто выдают ошибку при работе с большими данными в локальном режиме.
- Режим Mapreduce - Для запуска Pig в режиме mapreduce вам нужен доступ к кластеру Hadoop и установке HDFS. Режим Mapreduce является режимом по умолчанию; вы можете, но не обязаны, указать его, используя флаг -x (pig или pig -x mapreduce).
- Режим Tez - Для запуска Pig в режиме Tez вам нужен доступ к кластеру Hadoop и установке HDFS. Укажите режим Tez, используя флаг -x (-x tez).
Вы можете запустить Pig в любом режиме, используя команду «pig» (скрипт Perl bin/pig) или команду «java» (java -cp pig.jar ...).
Примеры
Этот пример показывает, как запустить Pig в локальном и mapreduce режиме с помощью команды pig.
/* local mode */ $ pig -x local ... /* Tez local mode */ $ pig -x tez_local ... /* mapreduce mode */ $ pig ... or $ pig -x mapreduce ... /* Tez mode */ $ pig -x tez ...
Интерактивный режим
Вы можете запустить 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>
Тезовый локальный режим
$ pig -x tez_local ... - Connecting to ... grunt>
Режим Mapreduce
$ pig -x mapreduce ... - Connecting to ... grunt> or $ pig ... - Connecting to ... grunt>
Режим Tez
$ pig -x tez ... - 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
Тезовый локальный режим
$ pig -x tez_local id.pig
Режим Mapreduce
$ pig id.pig or $ pig -x mapreduce id.pig
Режим Tez
$ pig -x tez 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, внутреннего JOIN и внешнего JOIN для группировки или объединения данных в двух или более отношениях.
-
Используйте оператор UNION для объединения содержимого двух или более отношений. Используйте оператор SPLIT для разделения содержимого отношения на несколько отношений.
Хранение промежуточных результатов
Pig хранит промежуточные данные, генерируемые между заданиями MapReduce, во временном расположении в HDFS. Это расположение должно уже существовать в HDFS до использования. Это расположение можно настроить, используя свойство pig.temp.dir. Значение свойства по умолчанию — «/tmp», что соответствует жёстко заданному расположению в Pig 0.7.0 и более ранних версиях.
Хранение конечных результатов
Используйте оператор STORE и функции загрузки/хранения для записи результатов в файловую систему (PigStorage — это функция хранения по умолчанию).
Примечание: На этапе тестирования/отладки вашей реализации вы можете использовать DUMP для отображения результатов на экране терминала. Однако в рабочей среде вы всегда хотите использовать оператор STORE для сохранения результатов (см. Store vs. Dump).
Отладка 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. Вы можете получить список свойств, используя команду помощи свойств. Все эти свойства необязательны; ни одно из них не является обязательным.
Для указания свойств Pig используйте один из этих механизмов:
- Файл pig.properties (Добавьте каталог, содержащий файл pig.properties, в путь к классам)
- Флаги -D и свойство Pig в переменной среды PIG_OPTS (export PIG_OPTS=-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_OPTS (export PIG_OPTS=–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 и режима Tez (см. Режимы выполнения).
Для начала выполните следующие предварительные действия:
- Убедитесь, что переменная среды JAVA_HOME установлена в корень вашей Java-установки.
- Убедитесь, что ваш PATH включает bin/pig (это позволит запускать учебные пособия с помощью команды «pig»).
$ export PATH=/<my-path-to-pig>/pig-0.14.0/bin:$PATH
- Установите переменную среды PIG_HOME:
$ export PIG_HOME=/<my-path-to-pig>/pig-0.14.0
- Создайте файл pigtutorial.tar.gz:
- Перейдите в каталог учебного пособия Pig (.../pig-0.14.0/tutorial).
- Запустите команду «ant» из каталога учебного пособия. Это создаст файл pigtutorial.tar.gz.
- Скопируйте файл pigtutorial.tar.gz из каталога учебного пособия Pig в свой локальный каталог.
- Разархивируйте файл pigtutorial.tar.gz.
$ tar -xzf pigtutorial.tar.gz
- Создается новый каталог с именем pigtmp. Этот каталог содержит Файлы учебного пособия Pig. Эти файлы работают с Hadoop 0.20.2 и содержат все необходимое для запуска Скрипта Pig 1 и Скрипта Pig 2.
Запуск скриптов Pig в локальном режиме
Для запуска скриптов Pig в локальном режиме выполните следующие действия:
- Перейдите в каталог pigtmp.
- Выполните следующую команду (используя либо script1-local.pig, либо script2-local.pig).
$ pig -x local script1-local.pig
Или, если вы используете локальный режим Tez:$ pig -x tez_local script1-local.pig
- Просмотрите файлы результатов, расположенные в каталоге script1-local-results.txt.
Вывод может содержать несколько предупреждений 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 или Tez
Для запуска скриптов Pig в режиме mapreduce выполните следующие действия:
- Перейдите в каталог pigtmp.
- Скопируйте файл excite.log.bz2 из каталога pigtmp в каталог HDFS.
$ hadoop fs –copyFromLocal excite.log.bz2 .
- Установите переменную среды PIG_CLASSPATH в расположение каталога конфигурации кластера (каталог, содержащий файлы core-site.xml, hdfs-site.xml и mapred-site.xml):
export PIG_CLASSPATH=/mycluster/conf
Если вы используете Tez, вам также необходимо указать каталог конфигурации Tez (каталог, содержащий tez-site.xml):
export PIG_CLASSPATH=/mycluster/conf:/tez/conf
Примечание: PIG_CLASSPATH также можно использовать для добавления других зависимостей сторонних производителей или файлов ресурсов, которые могут потребоваться скрипту pig. Если также необходимо сделать добавленные записи приоритетными в порядке расположения в классе Pig JVM, можно установить env-переменную PIG_USER_CLASSPATH_FIRST в любое значение, например 'true' (и сбросить env-переменную для отключения).
- Установите переменную среды HADOOP_CONF_DIR в расположение каталога конфигурации кластера:
export HADOOP_CONF_DIR=/mycluster/conf
- Выполните следующую команду (используя либо script1-hadoop.pig, либо script2-hadoop.pig):
$ pig script1-hadoop.pig
Или, если вы используете Tez:$ pig -x tez script1-hadoop.pig
- Просмотрите файлы результатов, расположенные в каталоге 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) в пакет «raw» как массив записей с полями 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-грамм со следующими полями: hour, ngram, score, count, mean.
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) в пакет «raw» как массив записей с полями 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.14.0/start.html