Я ранее зарегистрировал UDF с ульем. Это постоянный не TEMPORARY
. Он работает в beeline.
CREATE FUNCTION normaliseURL AS 'com.example.hive.udfs.NormaliseURL' USING JAR 'hdfs://udfs/hive-udfs.jar';
У меня есть искра, сконфигурированная для использования метастара улья. Конфигурация работает так, как я могу запросить таблицы улей. Я вижу UDF;
In [9]: spark.sql('describe function normaliseURL').show(truncate=False)
+-------------------------------------------+
|function_desc |
+-------------------------------------------+
|Function: default.normaliseURL |
|Class: com.example.hive.udfs.NormaliseURL |
|Usage: N/A. |
+-------------------------------------------+
Однако я не могу использовать UDF в инструкции sql;
spark.sql('SELECT normaliseURL("value")')
AnalysisException: "Undefined function: 'default.normaliseURL'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7"
Если я попытаюсь зарегистрировать UDF с искру (минуя метастор), он не сможет зарегистрировать его, предположив, что он уже существует.
In [12]: spark.sql("create function normaliseURL as 'com.example.hive.udfs.NormaliseURL'")
AnalysisException: "Function 'default.normaliseURL' already exists in database 'default';"
Я использую Spark 2.0, hiv metastore 1.1.0. UDF scala, мой код искрового драйвера - это python.
Я в тупике.
- Я исхожу в своем предположении, что Spark может использовать постоянные UDF, определенные в метастаре?
- Я правильно создаю функцию в улье?