我对我的数据模型感到困惑。即如果我需要使用UDAF来解决这个问题,以及hive在分解任务时如何解决这个问题。
问题陈述:我需要根据我回顾过去30天内的事件来计算每个用户的平均值(稍微不同的版本,然后是可用的,因此它需要是自定义公式)。所以我的数据形式为:
用户ID日期计数
user1 day30 34
user1 day30 23
user1 day4 22
user1 day1 21
user2 day30 23
user2 day23 12
usern ....
我需要的产品如下:
user1 avg:(34 + 23 + 22 + 21 ...)/ 30
user2 avg:(23 + 12 ...)/ 30
解决此问题的最有效内存方法是什么?我可能需要使用一个udf,但这对于有很多行的用户有什么用呢? UDAF是否针对每个用户处理此问题,或者我是否需要执行类似限制减少器中与一个用户相关的所有行的操作。谢谢!
答案 0 :(得分:0)
我不知道这里的挑战是什么,我使用了如下样本数据:
userid,date1,counts
user1,day30,34
user1,day30,23
user1,day4,22
user1,day1,21
user2,day30,23
user2,day23,12
以下是表格定义
create external table table1 (
userid string,
date1 string,
counts int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/tmp/tempd';
,查询是:
select userid , sum(counts)/30
from table1
group by userid;
输出
user1 3.3333333333333335
user2 1.1666666666666667
让我知道我的假设是否错误。