为什么Java Synchronized在Spark udf中不起作用?

时间:2019-09-20 03:24:28

标签: apache-spark synchronization

我需要在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)))

容器日志: 你好 你好 你好 你好

同步似乎不起作用 一次需要加载一个执行器

0 个答案:

没有答案