У меня есть скрипт Pig, который в настоящее время работает в локальном режиме, который обрабатывает огромный файл, содержащий список категорий:
/root/level1/level2/level3
/root/level1/level2/level3/level4
...
Мне нужно вставить каждую из них в существующую базу данных, вызвавхранимая процедура.Поскольку я новичок в Pig и интерфейс UDF немного устрашает, я пытаюсь что-то сделать, передавая содержимое файла через скрипт PHP.
Я обнаружил, что скрипт PHP видит только половину строк категории, которые я прохожу через него.Точнее, я вижу запись, возвращенную для ceil( pig_categories/2 )
.Ограничение 15 даст 8 записей после потоковой передачи через скрипт PHP - последняя будет пустой.
-- Pig script snippet
ordered = ORDER mappable_categories BY category;
limited = LIMIT ordered 20;
categories = FOREACH limited GENERATE category;
DUMP categories; -- Displays all 20 categories
streamed = STREAM limited THROUGH `php -nF categorize.php`;
DUMP streamed; -- Displays 10 categories
# categorize.php
$category = fgets( STDIN );
echo $category;
Любые мысли о том, что мне не хватает.Некоторое время назад я изучал справочное руководство по Pig, и, похоже, не так много информации, связанной с потоковой передачей через скрипт PHP.Я также пробовал канал #hadoop на IRC, но безрезультатно.Любое руководство будет высоко оценено.
Спасибо.
ОБНОВЛЕНИЕ
Становится очевидным, что это связано с EOL.Если я изменю сценарий PHP с использования fgets()
на stream_get_line()
, то получу 10 элементов назад, но запись, которая должна быть первой, пропускается, и появляется конечная пустая запись, которая отображается.
(Arts/Animation)
(Arts/Animation/Anime)
(Arts/Animation/Anime/Characters)
(Arts/Animation/Anime/Clubs_and_Organizations)
(Arts/Animation/Anime/Collectibles)
(Arts/Animation/Anime/Collectibles/Cels)
(Arts/Animation/Anime/Collectibles/Models_and_Figures)
(Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures)
(Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures/Gundam)
()
В этом наборе результатов должен быть первый элемент (Arts)
.Закрытие, но есть еще пробел для закрытия.