Как получить доступ к моей Spark UDF через Билайн
Это вариант этой публикации. Что я хочу сделать, это зарегистрировать Spark UDF при запуске HiveThriftServer2 и разрешить всем пользователям использовать эти UDF.
Я не могу использовать решение в этой публикации, потому что пользовательский UDF-файл, который я имею, не все UDF-файлы Hive. Они Spark UDF, поэтому я не могу зарегистрировать их как create FUNCTION as
используя команду улья, так как некоторые из UDF не расширяют org.apache.hadoop.hive.ql.exec.UDF
Поэтому вместо этого я загружаю HiveThriftServer2 v2.1.0 и добавляю строку после этой строки, чтобы Util.registerAll(SparkSQLEnv.sqlContext.sparkSession)
, Util
класс в пользовательском UDF-банке, который регистрирует все пользовательские функции Spark с помощью sparkSession sparkSession.sqlContext.udf.register("UDF_function_name", evaluate)
,
Тогда я начинаю свой благотворительный сервер sudo -u spark /usr/lib/spark/sbin/start-thriftserver.sh
, Я добавил несколько отладочных операторов для выбора после того, как зарегистрировал UDF в классе HiveThriftServer2. Я могу видеть результат. Когда я делаю spark.catalog.listFunctions()
Я могу видеть UDFs, но указан как временная функция.
Так что теперь, когда я подключаюсь к Thrift Server через beeline -u jdbc:hive2://localhost:10000/default
и сделать выбор, он говорит, что функция недействительна. И когда я выпускаю show functions
функций udf больше нет.
Я пытался положить spark.sql.hive.thriftServer.singleSession=true
в sudo -u spark /usr/lib/spark/sbin/start-thriftserver.sh
но это не помогает
Как зарегистрировать пользовательские функции Spark, чтобы их можно было использовать во всех сеансах через ThriftServer?
Спасибо!