首页 > 解决方案 > 如何从 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 编写的。

标签: javaapache-spark

解决方案


推荐阅读