我被困在一个用例中。我需要计算娱乐花费的百分比。
在我的信息流中,我获得了包含行业代码和花费金额的记录(行业代码是基于娱乐和非娱乐性的)
例如娱乐业代码>行业代码金额
157 100
257 200
157 300
非娱乐行业代码>行业代码金额
457 100
657 200
457 300
所以我需要计算娱乐花费的百分比,应该是娱乐量的总和/(娱乐量的总和非娱乐量的总和)
我正在尝试的解决方案:创建两个Ktables一个娱乐组,按娱乐代码分组,即 157400(100 + 300)
257 100
不再娱乐另一个KTable 457 400
657 200
我现在有两个KTable,但是如何计算%?这种方法正确吗?
答案 0 :(得分:0)
我不完全确定您到目前为止到底尝试了什么。当您创建两个表时,两个表是否都有多行(即每个代码行)或者您是否已经“合并”了不同的代码?如果每个表包含多行,则需要通过设置一个组合的代理键(例如所有行的整数值 0)将所有行聚合在一起:
KStream sumSpendingEntertainment = spendingEntertainment.groupBy((k,v) -> 0)
.aggregate(...);
KStream sumSpendingAll = spendingAll.groupBy((k,v) -> 0)
.aggregate(...);
最后,在一行中得到两个 KTable
;一个包含总支出,一个包含“娱乐支出”,两个 KTable 将使用相同的组合代理键(在我们的示例中为整数 0)。
在最后一步,您可以连接两个表以除以两个总和:
sumSpendingEntertainment.join(sumSpendingAll,
(sumEnt, sumAll) -> sumEnt / sumAll); // this is the `ValueJoiner` expressed as lambda