1

我有一个 Pig 脚本——当前在本地模式下运行——它处理一个包含类别列表的巨大文件:

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

我需要通过调用存储过程将这些中的每一个插入到现有数据库中。因为我是 Pig 新手,而且 UDF 界面有点令人生畏,所以我试图通过 PHP 脚本流式传输文件的内容来完成一些工作。

不过,我发现 PHP 脚本只能看到我通过它的类别行的一半。更准确地说,我看到了返回的记录ceil( pig_categories/2 )。通过 PHP 脚本流式传输后,限制为 15 将产生 8 个条目——最后一个将为空。

-- 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 脚本流式传输相关的信息。我也尝试过 IRC 上的#hadoop 频道,但无济于事。任何指导将不胜感激。

谢谢。

更新

很明显,这与 EOL 相关。如果我将 PHP 脚本从 using 更改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)。接近了,但仍有一些差距要缩小。

4

1 回答 1

5

所以事实证明,这是空格很重要的实例之一。我的开始<?php标签前面有一个空行。一旦我收紧了所有这些,一切都按预期顺利通过并产生了。/惩罚性的打头/

于 2010-09-30T16:07:27.027 回答