我有一个Pig脚本 - 当前以本地模式运行 - 处理包含类别列表的大文件:
/root/level1/level2/level3
/root/level1/level2/level3/level4
...
我需要通过调用存储过程将每个插入到现有数据库中。因为我是Pig的新手并且UDF界面有点令人生畏,我试图通过PHP脚本流式传输文件的内容来完成某些事情。
我发现PHP脚本只能看到我通过它的一半类别行。更确切地说,我看到ceil( pig_categories/2 )
返回的记录。
-- 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;
对我缺少的任何想法。我现在已经倾倒了猪参考手册一段时间,似乎没有太多关于通过PHP脚本流式传输的信息。我也试过IRC上的#hadoop频道无济于事。任何指导都将非常感谢。
感谢。
更新
很明显,这与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)
的第一项。关闭,但仍有一些差距要关闭。
答案 0 :(得分:5)
事实证明,这是空白问题的一个例子。我的开场<?php
标记前面有一个空行。一旦我收紧所有这些,一切都顺利通过并按预期生产。 / punitive headlap /