Поток свиньи через PHP - PullRequest
       3

Поток свиньи через PHP

1 голос
/ 28 сентября 2010

У меня есть скрипт 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).Закрытие, но есть еще пробел для закрытия.

1 Ответ

5 голосов
/ 30 сентября 2010

Так что получается, что это один из тех случаев, когда пробелы имеют значение. У меня была пустая строка перед моим открывающим тегом <?php. Как только я все это затянул, все проплыло и заработало, как и ожидалось. / карательная фара /

...