【发布时间】:2021-04-01 22:18:26
【问题描述】:
目前正在将以下代码转换为“JAR”以在 Databricks 集群中注册永久 UDF。面临 NoClassDefFoundError 之类的问题,但我在使用 SBT 构建 Jar 时添加了所需的库依赖项。源代码:https://databricks.com/notebooks/enforcing-column-level-encryption.html
在 build.sbt 下面使用
scalaVersion := "2.13.4"
libraryDependencies += "org.apache.hive" % "hive-exec" % "0.13.1"
libraryDependencies += "com.macasaet.fernet" % "fernet-java8" % "1.5.0"
如果上面有任何问题,请指导我正确的库。
请帮帮我,
import com.macasaet.fernet.{Key, StringValidator, Token}
import org.apache.hadoop.hive.ql.exec.UDF;
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
}
}
【问题讨论】:
-
你需要要么
sbt assembly将此依赖项包含到 jar 中,要么将此依赖项显式添加到集群定义中 -
非常感谢@AlexOtt!修复!。从 Spark 配置中读取 Secret 时出现错误,有什么想法吗? HiveException:无法使用参数执行方法 public java.lang.String udfDecrypt.evaluate(java.lang.String,java.lang.String) {***gAAAAABf4kVBzP-LI0geSu0hlXq89XwAgxeJ4QZAbYhnj5MobaO9KZxtxsP8XRZ1O6LskZwdI8hr5QH9gtGXYffSaKDwQjLNiQ==,[已编辑]}:由:InvocationTargetException:引起:IllegalArgumentException:非法 base64 字符 2a
-
检查你的字符串是有效的base64
-
好的,谢谢!让我检查一下!
标签: java scala jar databricks fernet