Как использовать настраиваемый типобезопасный агрегатор в Spark SQL

В документации Spark описывается, как создать обе нетипизированная пользовательская агрегатная функция (code) (он же udaf) и агрегатор со строгой типизацией (код) (он же подкласс org.apache.spark.sql.expressions.Aggregator).

Я знаю, что вы можете зарегистрировать udaf для использования в sql через spark.udf.register("udafName", udafInstance), а затем использовать его как spark.sql("SELECT udafName(V) as aggV FROM data").

Есть ли способ использовать агрегатор и в sql?


person turtlemonvh    schedule 28.06.2018    source источник


Ответы (1)


Не совсем Aggregator API разработан специально с учетом "строго" типизированного Datasets. Вы заметите, что он не принимает Columns, но всегда работает с целыми объектами записи.

Это не совсем вписывается в модель обработки SQL:

  • В SQL вы всегда работаете с Dataset[Row]. Не так много пользы от Aggregator.
  • Операции применяются к столбцам, в то время как Aggregator занимает полное Row.

Для использования с SQL API вы можете создать UserDefinedAggregateFunction, который можно зарегистрировать с помощью стандартные методы.

person user10010023    schedule 29.06.2018
comment
Это то, о чем я думал, но я надеялся, что у нас есть способ повторно использовать наши агрегаторы в некотором коде sql без необходимости писать UDAF. Спасибо за ответ. - person turtlemonvh; 30.06.2018