我已經按照本指南和這個問題嘗試實作解密函式以在 SQL 視圖中使用。
我已將示例中的此 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;
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
我注意到可以使用任何 jar 檔案路徑(即使是不存在的路徑)來宣告該函式,它仍然會回傳“OK”。
我正在為 Azure 使用 Databricks。
uj5u.com熱心網友回復:
您的 UDF 代碼似乎丟失了:
package com.nm.udf;
在頂部。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381433.html
標籤:斯卡拉 阿帕奇火花 apache-spark-sql 数据块 azure-databricks
上一篇:如何模擬MVar2make方法
