0

我昨天开始使用 Pig 来获得工作机会,我以前从未使用过它,并且必须为下周生产一些东西。我还没有设法安装它,但正在努力......

同时,我尝试学习使用 Pig Latin,并制作了一些东西,但我无法测试它。

我正在使用的数据格式为 user_name|Country|movie|director,每次用户观看电影时,文件中都会有一个新条目,一个文件代表 1 天。

我想做的是创建一个“用户资料”,说明用户的前 5 部电影、前 5 名导演以及用户每天观看的电影数量。

我编码的内容:

daily_watch=LOAD '$docs_in' USING PigStorage('|') AS     (user_id:int,country:chararray,director_id:int,movie_id:int)

users=GROUP daily_watch BY (user_id);
number_of_watch= FOREACH users GENERATE group, COUNT(daily_watch) AS total; 
STORE number_of_watch INTO "$number_of_watch"
--at this point I want number of watch = (user_id,number_film_watched)


directors_and_users =  GROUP daily_watch BY (user_id,director_id);
top_directors= FOREACH directors_and_users GENERATE 
    user_id
    group
    COUNT(daily_watch) AS total_director;
top5_directors= FOREACH top_directors {
    sorted = order directors_and_users by total_directors desc;
    top5= limit sorted 5;
    GENERATE FLATTEN(top5);
};
STORE top_director INTO "$top5_directors"
--at this point I want top5_directors=(user_id,{user_id,director_id},number_of_movie_seen_from_director)


movies_directors_users= GROUP daily_watch BY (user_id,movie_id,director_id);
top_movies = FOREACH movies_directors_users GENERATE
    user_id
    group
    COUNT(daily_watch) AS total_movies
;
top5_movies= FOREACH top_movies {
    sorted=order movies_directors_users by total_movies desc;
    top5=limit sorted 5;
    GENERATE FLATTEN(top5);
}
--at this point, I want top5_movies=(user_id,{user_id,director_id,movie_id},number_of_times_movie_seen)


STORE top5_movies INTO "$top5_movies"
output= FOREACH users GENERATE AppendToBag(top5_movies.$1,top5_movies.$2,top5_directors.$1,top5_directors.$2)
-- now I want to have output=(user_id,{user_id,director_id,movie_id},number_of_times_movie_seen,{user_id,director_id},number_of_movie_seen_from_director)

我的代码有什么明显的错误吗?我走的好吗?我正在尝试将此代码嵌入到 python 中(我已经编写了 python 部分)。

另外,有没有一种简单的方法来测试我的代码?(我写了一些 txt 文件来测试,但我很难在我的电脑上安装 hadoop 和 pig(我有 Windows 7)。

非常感谢您的帮助 !

4

2 回答 2

0

按id统计物品,我推荐你使用DATAFU,非常强大。 http://datafu.incubator.apache.org/docs/datafu/guide/bag-operations.html 自带包操作,可以对包进行计数、平均、求和、分位数。

于 2016-03-04T16:40:22.630 回答
0

您可以使用带有轻量级 VM 的Cloudera-Live 。Cloudera Hue是一个基于 Django 的网络工具,它带有一个 Pig 编辑器,可用于测试和运行。快乐的脚本!

于 2016-03-04T00:20:51.053 回答