gpt4 book ai didi

hadoop - Hive UDF 执行

转载 作者:可可西里 更新时间:2023-11-01 14:50:33 24 4
gpt4 key购买 nike

我编写了一个使用内部 API 进行解密的 Hive UDF,如下所示:

public Text evaluate(String customer) {
String result = new String();

if (customer == null) { return null; }

try {
result = com.voltage.data.access.Data.decrypt(customer.toString(), "name");
} catch (Exception e) {
return new Text(e.getMessage());
}

return new Text(result);
}

Data.decrypt 会:

public static String decrypt(String data, String type) throws Exception {
configure();
String FORMAT = new String();
if (type.equals("ccn")) {
FORMAT = "CC";
} else if (type.equals("ssn")) {
FORMAT = "SSN";
} else if (type.equals("name")) {
FORMAT = "AlphaNumeric";
}

return library.FPEAccess(identity, LibraryContext.getFPE_FORMAT_CUSTOM(),String.format("formatName=%s", FORMAT),authMethod, authInfo, data);
}

其中 configure() 创建了一个非常昂贵的上下文对象。

我的问题是:Hive 是否为查询返回的每一行执行一次此 UDF?即,如果我选择 10,000 行,评估方法是否会运行 10,000 次?

我的直觉告诉我是的。如果是这样,那么这是第二个问题:

有什么方法可以执行以下操作之一:

a) 在查询开始时运行一次configure(),然后共享上下文对象

b) 不是 UDF 返回解密的字符串,而是将加密的字符串聚合到某个集合中,然后我对该集合进行批量解密?

提前致谢

最佳答案

configure() 是需要每个 JVM 调用一次,还是每个 UDF 类实例调用一次?

如果每个 JVM 一次,只需将它放在类中的一个静态 block 中,如下所示:

static {
configure();
}

如果每个实例一次,把它放在构造函数中:

public [class name]() {
super();
configure();
}

关于hadoop - Hive UDF 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866610/

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