我无法通过Hive中的有效查询找到实现以下功能的方法。根据加权平均值,意图是获得一年内发布的最高评分电影。
更清楚这是我在单个查询中可以在配置单元中执行的操作。
var allMoviesRated = select count(movieid)其中year(from_unixtime(unixtime))= 1997;
选择movieid,avg(评级),count(movieid),平均(评级)/ allMoviesRated为加权 (选择movieid,rating,year(from_unixtime(unixtime))作为u_data的年份,其中u_data_new.year = 1997)u_data_new按movieid顺序分组加权desc limit 10;
答案 0 :(得分:0)
您可以编写执行2个查询的脚本 第一个查询一个获取allMoviesRated并存储在脚本变量中。 第二个查询是您使用hiveconf传递此值的排名查询
因此,您的脚本可能看起来像
your script.bash or python------------start--------
var allMoviesRated = os.cmd (hive -S "use db; select count(distinct movieid);")
ranking = os.cmd ( hive -S -hiveconf NUM_MOVIES = allMoviesRated -f ranking_query.hql)
your script.bash or python------------end--------
ranking_query.hql:
select movieid, avg(rating), count(movieid), avg(rating)/${hiveconf:NUM_MOVIES }as weighted
from (
select movieid, rating, year(from_unixtime(unixtime)) as year
from u_data where u_data_new.year = 1997) u_data_new
group by movieid order by weighted desc limit 10;