使用Java实现要在RelationalGroupedDataset.agg()中使用的用户定义聚合函数
看起来您可以像这样聚合多个列:使用Java实现要在RelationalGroupedDataset.agg()中使用的用户定义聚合函数,java,apache-spark,Java,Apache Spark,看起来您可以像这样聚合多个列: Dataset<Row> df = spark.read().textFile(inputFile); List<Row> result = df.groupBy("id") .agg(sum(df.col("price")), avg(df.col("weight"))) .collectAsList(); Dataset df=spark.read().textFile(inputFile); 列表结果=df.groupBy(
Dataset<Row> df = spark.read().textFile(inputFile);
List<Row> result = df.groupBy("id")
.agg(sum(df.col("price")), avg(df.col("weight")))
.collectAsList();
Dataset df=spark.read().textFile(inputFile);
列表结果=df.groupBy(“id”)
.agg(总和(价格)、平均值(重量)
.collectAsList();
现在,我想编写自己的自定义聚合函数,而不是sum
或avg
。我该怎么做
显示了如何创建自定义聚合函数。但是这个函数是注册的,然后在SQL中使用,我不认为它是否可以在
.agg()
函数中使用。由于agg
接受Column
实例,并且自定义聚合函数不是一个实例。如果您有一个扩展UserDefinedAggregationFunction
的类GeometricMean
,那么您可以像这样使用它(取自):
将其转换为Java应该很容易谢谢,只有一个问题。由于我对Scala不太熟练,Scala中的
gm(col(“id”)
会翻译成Java的gm.apply(col(“id”)
,对吗?
// 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()