java—需要为每个使用hive的用户计算30天历史记录的平均每个用户

lrpiutwd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(305)

我对我的数据模型感到困惑。i、 e如果我需要使用udaf来解决这个问题,以及在分解任务时hive如何处理这个问题。
问题陈述:我需要根据30天内的事件计算每个用户的平均值(与现有版本略有不同,因此需要自定义公式)。所以我的数据是这样的:
用户ID日期计数
用户1第30天34
用户1第30天23
用户1第4天22
用户1第21天
用户2第30天23
用户2第23天12
用户。。。。
我需要的输出如下:
用户1平均值:(34+23+22+21…)/30
用户2平均值:(23+12…)/30
解决这个问题最有效的方法是什么?我可能需要使用一个自定义项,但是对于一个有很多行的用户这是如何工作的呢?udaf是按用户处理这个问题,还是我需要做一些类似于限制reducer中与一个用户相关的所有行的事情。谢谢!

06odsfpq

06odsfpq1#

我不知道这里的挑战是什么,我使用的样本数据如下:

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

如果我的假设是错的,请告诉我。

相关问题