以前にハイブを持つUDFを登録しました。それは永久ではないTEMPORARY
です。それはビーラインで動作します。Spark SQLの既存のHive永続UDFを使用できません
CREATE FUNCTION normaliseURL AS 'com.example.hive.udfs.NormaliseURL' USING JAR 'hdfs://udfs/hive-udfs.jar';
ハイブメタストアを使用するようにスパークが設定されています。私はハイブテーブルを照会できるので、configが動作しています。私は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. |
+-------------------------------------------+
ただし、SQL文でUDFを使用することはできません。
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"
spark(メタストアを迂回する)でUDFを登録しようとすると、登録が失敗し、すでに存在していることが示唆されます。
In [12]: spark.sql("create function normaliseURL as 'com.example.hive.udfs.NormaliseURL'")
AnalysisException: "Function 'default.normaliseURL' already exists in database 'default';"
私はスパーク2.0のハイブメタストア1.1.0を使用しています。 UDFはスカラー、私のスパークドライバーコードはPythonです。
私は困惑しています。
- スパークは、メタストア定義の永続UDFを利用できると私は間違いありませんか?
- ハイブで正しく機能を作成していますか?
あなたの 'SparkSession.builder'で' enableHiveSupport() 'を定義しましたか? –
そうです。私は見ることができ、ハイブ定義テーブルを照会するよう照会するので、ハイブサポートが適切に有効になっていると仮定します。 –
Humm ... spark-submitまたはspark-shell呼び出しでUDF jarを定義しましたか? './bin/spark-shell --jars .jar' –