使用 Java 实现要在 RelationalGroupedDataset.agg()

似乎您可以像这样聚合多个列:


Dataset<Row> df = spark.read().textFile(inputFile);

List<Row> result = df.groupBy("id")

  .agg(sum(df.col("price")), avg(df.col("weight")))

  .collectAsList();

现在,我想编写自己的自定义聚合函数而不是sumor avg。我怎样才能做到这一点?


在星火文档演示了如何创建一个自定义聚合功能。但是那个注册了然后在SQL中使用,我不认为它是否可以在.agg()函数中使用。由于agg接受Column实例并且自定义聚合函数不是其中之一。


ITMISS
浏览 266回答 1
1回答

冉冉说

如果您有一个GeometricMean扩展类UserDefinedAggregationFunction,那么您可以像这样使用它(取自https://docs.databricks.com/spark/latest/spark-sql/udaf-scala.html):// Create an instance of UDAF GeometricMean.val gm = new GeometricMean// Show the geometric mean of values of column "id".df.groupBy("group_id").agg(gm(col("id")).as("GeometricMean")).show()应该很容易将其转换为 Java
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java