Зарегистрировать Spark UDAF в SQL - PullRequest
1 голос
/ 08 мая 2019

В Интернете достаточно документации по определению UDAF и его регистрации, но я не видел ни одного примера использования SQL.Например, допустим, я определил пользовательский UDAF:

import org.apache.spark.sql.expressions.UserDefinedAggregateFunction    

class MyUDAF extends UserDefinedAggregateFunction {
  ...
}

Я понимаю, что вы можете скомпилировать jar, добавить его в путь к классам Spark, зарегистрировать и использовать его с API-интерфейсом scala:

$SPARK_HOME/bin/spark-shell  --jars my-udaf.jar
> spark.udf.register("myUDAF", new new MyUDAF)
> spark.sql("select myUDAF(column) from ...")

В API SQL есть CREATE FUNCTION, но в соответствии с документами, которые ожидают Hive UDF / UDAF, а не Spark.То есть UDAF должен подкласс org.apache.hadoop.hive.ql.exec.hive.UDAF, а не Spark UserDefinedAggregateFunction.Действительно, если я попытаюсь, то получу следующую ошибку:

spark-sql> CREATE FUNCTION myUDAF AS 'MyUDAF';
spark-sql> select myUDAF(column) from blah;
Error in query: No handler for Hive UDF 'MyUDAF'; line 1 pos 7

Кажется странным, что API SQL и scala будут относиться к регистрации UDAF по-разному. Есть ли способ зарегистрировать UDAF Spark с использованием SQL API? CREATE FUNCTION, похоже, не работает.

В конечном итоге я пытаюсь зарегистрировать некоторые UDAF в Sparkбережливый сервер и зарегистрировать их автоматически при запуске сервераТам может быть другой подход.Например, эта статья запускает экономичный сервер, используя класс Scala вместо start-thriftserver.sh.

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