我对我的数据模型感到困惑。 即如果我需要使用 UDAF 来解决这个问题,以及 Hive 在拆分任务时如何处理这个问题。
问题陈述:我需要根据 30 天的事件计算每个用户的平均值(与可用的版本略有不同,因此它需要是一个自定义公式)。所以我的数据形式为:
用户标识日期计数
用户1 天30 34
用户1 天30 23
用户1 天4 22
用户1 天1 21
用户2 天30 23
用户2 天23 12
用户....
作为输出,我需要的是以下内容:
用户 1 平均: (34+23+22+21...)/30
用户 2 平均: (23+12...)/30
解决此问题的最节省内存的方法是什么?我可能需要使用 udf,但这如何与具有大量行的用户一起工作?UDAF 是否按用户处理此问题,或者我是否需要执行诸如限制与化简器中一个用户有关的所有行之类的操作。谢谢!
我不知道这里的挑战是什么,我使用了以下示例数据,如下所示:
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
如果我的假设是错误的,请告诉我。