似乎您可以像这样聚合多个列:
Dataset<Row> df = spark.read().textFile(inputFile);
List<Row> result = df.groupBy("id")
.agg(sum(df.col("price")), avg(df.col("weight")))
.collectAsList();
现在,我想编写自己的自定义聚合函数,而不是sum
或avg
。我该怎么办?
Spark documentation显示了如何创建自定义聚合函数。但是那个被注册然后在SQL中使用,我不认为它是否可以在.agg()
函数中使用。由于agg
接受Column
个实例,并且自定义聚合函数不是一个。
答案 0 :(得分: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