[FIXED] Databricks SCALA UDF kann die Klasse beim Registrieren der Funktion nicht laden

Ausgabe

Ich habe diese Anleitung und diese Frage befolgt und versucht, eine Entschlüsselungsfunktion zur Verwendung in einer SQL-Ansicht zu implementieren.

Diesen Scala-Code habe ich im Beispiel in eine JAR-Datei kompiliert und in das Databricks File System (DBFS) hochgeladen:

import com.macasaet.fernet.{Key, StringValidator, Token};
import org.apache.hadoop.hive.ql.exec.UDF;
import java.time.{Duration, Instant};

class Validator extends StringValidator {
    override def getTimeToLive() : java.time.temporal.TemporalAmount = {
      Duration.ofSeconds(Instant.MAX.getEpochSecond());
    }
  }

class udfDecrypt extends UDF {

    def evaluate(inputVal: String, sparkKey : String): String = {

      if( inputVal != null && inputVal!="" ) {
        val keys: Key = new Key(sparkKey)
        val token = Token.fromString(inputVal)
        val validator = new Validator() {}
        val payload = token.validateAndDecrypt(keys, validator)
        payload
      } else return inputVal
    }
  }

Ich kann die Funktion wie gezeigt deklarieren:

%sql
CREATE OR REPLACE FUNCTION default.udfDecrypt AS 'com.nm.udf.udfDecrypt'
USING jar 'dbfs:/FileStore/jars/decryptUDF.jar';

Aber wenn ich versuche, es aufzurufen, wird ein Fehler ausgegeben:

%sql
SELECT default.udfDecrypt(field, '{key}') FROM default.encrypted_test;

Error in SQL statement: AnalysisException: Can not load class 'com.nm.udf.udfDecrypt' when registering the function 'default.udfDecrypt', please make sure it is on the classpath; line 1 pos 7

Ich habe festgestellt, dass die Funktion mit einem beliebigen JAR-Dateipfad (auch einem, der nicht existiert) deklariert werden kann und dennoch „OK“ zurückgibt.

Ich verwende Databricks für Azure.

Lösung

Anscheinend fehlt Ihr UDF-Code:

package com.nm.udf;

oben.


Beantwortet von –
jgp


Antwort geprüft von –
Robin (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like