java - 如何做聚合函数,可能列和提取回来
问题描述
在 spark-sql-2.4.1v 中,我有一个场景,我需要计算几个聚合给定的列列表,即感兴趣的列
我需要的每一列在相同的列分组上生成几个聚合。有什么方法可以一次性执行 group by 并取回这些聚合?
如果我一次做每个项目(即兴趣列),那么我需要多次按数据分组,这会花费大量时间。
假设我有
columns_interestedList.stream().forEach( col_interested -> {
Dataset groupByResDs_col_interested = dataDs.groupBy("grp_col_1","grp_col_1").agg(count((*).as("col_interested_count") , avg(col_interested ).as(col_interested_avg)));
}
);
如上所示,我需要一次获取所有感兴趣的列聚合,怎么做(避免每个 col_interested 的分组)
一旦我完成所有列,如何取回它们,如下所示:
-----------------------------------------------------------------------------
col_interested_one col_interested_one_count col_interested_one_avg
col_interested_two col_interested_two_count col_interested_two_avg
col_interested_three col_interested_three_count col_interested_three_avg
------------------------------------------------------------------------------
解决方案
如果您要groupBy
使用相同的列进行所有操作,并且想要创建所有聚合列引用,就像avg(col_interested ).as(col_interested_avg)
所有元素一样,columns_interestedList
您可以使用流创建所有引用,并将它们传递给 gag 方法。
List<Column> avgCols = columns_interestedList.stream()
.map(col_interested -> avg(col_interested).as(col_interested + "_avg"))
.collect(Collectors.toList());
dataDs.groupBy("grp_col_1","grp_col_1")
.agg(avgCols.add(count((*).as("col_interested_count").toArray(new Column[0]));
推荐阅读
- git - 如何fork一个flutter包并进行更改
- roblox - 如何在 Roblox 中打开和关闭 gui?
- scala - Consumer committableSource 和 plainSource 有什么区别?
- r - R Barplot:Y轴在顶部被切断?
- python - 如何在 Python 中使用 Fuzzywuzzy 加速模糊匹配
- flexbox - 使用 flexbox 在图像上覆盖 bootstrap 4 透明导航栏
- python - Python中基于多个复杂条件的join
- android - 为什么我的 html 文件没有显示在 android 应用程序中?
- c# - 如何比较对象
- java - “SQLiteDatabase.insert(TABLE_NAME,null,ContentValues);” 显示“数据类型不匹配”错误