Реализация определенной пользователем функции агрегирования для использования в RelationalGroupedDataset.agg () с использованием Java - PullRequest
0 голосов
/ 28 октября 2018

Кажется, что вы можете объединить несколько столбцов следующим образом:

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 показано, как создать пользовательскую функцию агрегирования. Но этот зарегистрирован и затем используется в SQL, и я не думаю, что его можно использовать в функции .agg(). Так как agg принимает Column экземпляров и пользовательская функция агрегирования не одна.

1 Ответ

0 голосов
/ 28 октября 2018

Если у вас есть класс 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...