java - 如何从 Java 中的 ArrayList 创建一组 spark 数据框列/agg 参数
问题描述
我希望生成一个如下所示的数据框:
finalDF.groupBy(col("c1"), col("c2"), col("c3"), col("c4")).agg(
sum("metric1").alias("metric1_count"),
sum("metric2").alias("metric2_count"),
sum("metric3").alias("metric3_count"),
sum("metric4").alias("metric4_count"),
sum("metric5").alias("metric5_count")
)
在我的实际情况中,我有超过 4 个列和 5 个指标来生成聚合。更重要的是,我的列和聚合定义存储在配置文件中,并且将以 ArrayList 的形式在我的 Java 应用程序中可用。
我一直在尝试寻找以编程方式生成这些“scala varargs”的方法,但我还没有在 Google 上找到任何东西。通过以编程方式,我正在考虑以下形式:
finalDF.groupBy(cols.stream().map(col -> {col}).collect(Collector.joining("..."))).agg(
metrics.stream().map(metric -> {sum(metric).alias(metric + "_count")})
)
显然上述方法不起作用,但在 JAVA 中我找不到任何适合我的方法。非常感谢任何提示。
编辑:这里有一个有趣的答案,但不幸的是,就像所有好的 Spark 帖子一样,它是用 scala 编写的。
解决方案
推荐阅读
- r - 使用 dplyr 根据每个组中唯一出现的总数给出一个 ID
- sql - SELECT 的情况 - 不返回预期结果
- excel - Excel公式得出下一个可用日期的不均匀频率
- github - 是否可以使用 Databricks-Connect 和 Github 从 IDE 更改我的 Azure Databricks 笔记本?
- sql-server - 获取子字符串并在 Where 子句中使用它
- c - 在十进制到二进制转换的代码中找不到错误
- flutter - 条带读取文件同步的图像选择器路径 Flutter Web
- firebase - 让一个用户使用 firebase/flutter 中的自定义字段注册另一个用户
- reactjs - 启动 Chrome 扩展后出错,使用 React 和 Redux 创建(未检查 runtime.lastError: 无法建立连接。)
- notepad++ - 为什么 Notepad++ 中的行没有按预期排序?