我需要在UDF函数中使用System.load()初始化一些.so lib, 它只能被加载一次,所以我创建了一个具有同步的实例,但是它不起作用
public static synchronized Instance getInstance() throws IOException {
synchronized (Lock) {
System.out.println("hello")
if (instance == null) {
instance = new Instance();
// System.load(xxx)
}
return instance;
}
}
以及火花代码:
val reRank = (indice:mutable.WrappedArray[Long], values:mutable.WrappedArray[Float]) => {
Instance.getInstance().inference(indice.toArray,values.toArray)
}
val reRankUdf = udf(reRank)
sc.withColumn("name",reRank(sc(indicesCloumnName),sc(valuesCloumnName)))
容器日志: 你好 你好 你好 你好
同步似乎不起作用 一次需要加载一个执行器