我昨天开始使用Pig寻找工作机会,我之前从未使用它,并且必须在下周生产一些东西。我仍然没有设法安装它,但正在努力...
与此同时,我试图学习使用Pig Latin,我制作了一些东西,但我无法测试它。
我正在处理的数据是表格 USER_NAME |国家|电影|导演 每次用户观看电影时,新条目都会进入文件,文件代表1天。
我想要做的是创建一个“用户个人资料”,为用户,前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)。
非常感谢您的帮助!
答案 0 :(得分:0)
您可以使用轻量级VM附带的Cloudera-Live。这附带Cloudera Hue,一个基于Django的Web工具,它带有一个Pig编辑器,可用于测试和运行。快乐的脚本!
答案 1 :(得分:0)
要按ID计算项目,我建议您使用DATAFU,功能非常强大。 http://datafu.incubator.apache.org/docs/datafu/guide/bag-operations.html 它带有行李操作,因此您可以计算,平均,总和和分位数。