gpt4 book ai didi

scala - Databricks SCALA UDF 在注册函数时无法加载类

转载 作者:行者123 更新时间:2023-12-05 04:40:08 25 4
gpt4 key购买 nike

我关注了this guidethis question尝试实现解密函数以在 SQL View 中使用。

我已将示例中的此 scala 代码编译为 jar 文件并上传到 Databricks 文件系统 (DBFS):

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
}
}

我可以像演示的那样声明函数:

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

但如果我尝试调用它,则会抛出错误:

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

SQL语句错误:AnalysisException:注册函数'default.udfDecrypt'时无法加载类'com.nm.udf.udfDecrypt',请确保它在类路径中;第 1 行位置 7

我注意到可以使用任何 jar 文件路径(即使不存在的路径)声明该函数,它仍会返回“OK”。

我正在为 Azure 使用 Databricks。

最佳答案

您的 UDF 代码似乎丢失了:

package com.nm.udf;

在顶部。

关于scala - Databricks SCALA UDF 在注册函数时无法加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70335768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com