2010-09-28 5 views
1

J'ai un script Pig - en cours d'exécution en mode local - qui traite un énorme fichier contenant une liste de catégories:de porc de flux par PHP

/root/level1/level2/level3 
/root/level1/level2/level3/level4 
... 

je dois insérer chacun de ceux-ci dans une base de données existante en appelant une procédure stockée. Parce que je suis nouveau à Pig et que l'interface UDF est un peu intimidante, j'essaye de faire quelque chose en diffusant le contenu du fichier via un script PHP.

Je trouve que le script PHP ne voit que la moitié des lignes de catégories que je traverse. Plus précisément, je vois un enregistrement retourné pour ceil(pig_categories/2). Une limite de 15 produira 8 entrées après la diffusion du script PHP - la dernière sera vide.

-- 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; 

Aucune idée de ce qui me manque. J'ai versé sur le manuel de référence Pig pendant un moment maintenant et il ne semble pas y avoir beaucoup d'informations liées à la diffusion via un script PHP. J'ai également essayé le canal #hadoop sur IRC en vain. Toute orientation serait très appréciée.

Merci.

MISE À JOUR

Il devient évident que cela est lié EOL. Si je change le script PHP d'utiliser fgets() à stream_get_line(), alors je récupère 10 éléments, mais l'enregistrement qui devrait être le premier est ignoré et il y a un enregistrement vide final qui s'affiche.

(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) 
() 

Dans ce jeu de résultats, il devrait y avoir un premier élément de (Arts). Fermeture, mais il reste encore un peu de temps à combler.

Répondre

5

Il s'avère donc que c'est l'un de ces cas où les espaces sont importants. J'avais une ligne vide devant mon tag <?php d'ouverture. Une fois que j'ai resserré tout cela, tout a navigué et produit comme prévu. /barrette de tête punitive/

Questions connexes