java - 使用 group by 根据数据的两个不同子集获取两个聚合的不同计数
问题描述
考虑我有Dataset<Row>
这样的
Day User isInstall isPlayed
1 U1 1 1
1 U2 1 0
1 U3 0 1
1 U4 1 0
1 U4 1 1
2 U6 1 1
2 U7 1 0
2 U8 0 1
2 U8 0 1
2 U7 1 0
我想对 Day 字段进行分组,并获取 isInstall 为 1 和 isPlayed 为 1 的唯一用户数。结果应该是这样的:
Day isInstallUU isPlayedUU
1 3 3
2 2 2
我能够为 isInstall 和 isPlayed 这样的计数获得不同的数据集,但我很困惑如何合并它们并获得一个数据集。
Dataset<Row> result1 = responseDataset.filter(col("isInstall").equalTo(1))
.groupBy("Day").agg(countDistinct("User").alias("isInstallUU"));
Dataset<Row> result2 = responseDataset.filter(col("isPlayed").equalTo(1))
.groupBy("Day").agg(countDistinct("User").alias("isPlayedUU"));
如何使用 java Spark API 实现这一点?
解决方案
首先,根据作者提供的条件过滤数据框。然后使用 group by 按“Day”列聚合,并附加两个代表用户不同计数的新列。检查以下代码:
responseDataset.filter(col("isInstall").equalTo(1) && col("isPlayed").equalTo(1))
.groupBy("Day")
.agg(countDistinct("User").as("isInstallUU"), countDistinct("User").as("isPlayedUU"));
推荐阅读
- android - 将世博会从 35 升级到 36 后应用程序崩溃
- excel - Excel - 使用索引的动态总和
- java - 如何使用 maven 项目在 JavaFX 中生成可执行 jar
- powershell - powershell Win-GetEvent -MaxEvents
- javascript - 如果页面在端口上运行,则反应侦听
- django - Django - 将一个模型字段链接到另一个模型的字段
- settings - 如何更改 JetBrains IDE 中 HEX 颜色的显示方式
- react-native - 更新的代码未在 React Native Simulator 中显示
- android - 在 kotlin 中从片段转移到另一个片段
- android - 如何使用 kotlin flow 实现完整的存储库