我们可以将两个字段分组(一个是键,另一个是值),并以kstreams为单位进行计数。
我想获取每个pid(key)的userid(value)的不同计数。groupByKey不会给出不同的userid。 我尝试使用groupBy而不是groupByKey,但是看到语法错误。有人可以帮忙吗?
KStream<Integer, Integer> stream = events.map((key, value) -> new KeyValue<Integer, Integer>(value.getpid(), value.getUserId()));
KGroupedStream<Integer, Integer> groupedStream = stream.groupByKey(Grouped.with(Serdes.Integer(), Serdes.Integer());
答案 0 :(得分:0)
如果要按用户ID和pid进行计数,可以将两者都作为Pojo放入键中:
KStream<UserPid, Integer> stream =
events.selectKey((key, value) -> new UserPid(value.getpid(), value.getUserId()));
KGroupedStream<Integer, Integer> groupedStream =
stream.groupByKey(Grouped.with(new UserPidSerde(), Serdes.Integer());
您需要创建相应的POJO类UserPid
和Serde类UserPidSerde extends Serde<UserPid>
。
答案 1 :(得分:-1)
由于每个pid(键)都需要不同的用户(值)计数,因此需要首先使用groupByKey
,它将所有users
与相同的pid
分组。然后,您需要进行汇总以形成set
的{{1}}(以获得唯一用户)。之后,只需获取user
的大小,即可获得每个pid的独立用户数。
set