【发布时间】:2018-06-13 21:04:52
【问题描述】:
代码使用单例来包装广播变量,如下所示:
class JavaWordBlacklist {
private static volatile Broadcast<List<String>> instance = null;
public static Broadcast<List<String>> getInstance(JavaSparkContext jsc) {
if (instance == null) {
synchronized (JavaWordBlacklist.class) {
if (instance == null) {
List<String> wordBlacklist = Arrays.asList("a", "b", "c");
instance = jsc.broadcast(wordBlacklist);
}
}
}
return instance;
}
}
并在wordCounts.foreachRDD((rdd, time) -> {...}中初始化广播变量
我的问题是为什么不在父类中声明private static volatile Broadcast<List<String>> instance = null;,即JavaRecoverableNetworkWordCount?
(在我看来,由于广播变量在foreachRDD()中初始化,在单个驱动线程中执行,这里不会发生竞争条件,所以单例保护是不必要的。)
【问题讨论】:
标签: java apache-spark spark-streaming