【问题标题】:Error in SQL statement: NoClassDefFoundError: com/macasaet/fernet/ValidatorSQL 语句中的错误:NoClassDefFoundError: com/macasaet/fernet/Validator
【发布时间】: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


【解决方案1】:

确保 fernet-java 库已安装在您的集群中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多