我正在阅读Scala编程,我不理解以下句子(pdf第112页):
每个单例对象都实现为从静态变量引用的合成类的实例,因此它们具有与Java静态相同的初始化语义.
这是否意味着如果我在scala中有单例FooBar,编译器将创建一个名为FooBar $的类?
另外作者的意思是"从静态变量引用"?是否有一个隐藏的静态变量,某处持有对某些FooBar $类的引用?
我感谢任何帮助.
我需要在Spark中的所有执行程序的函数中使用不可序列化的第三方类,例如:
JavaRDD<String> resRdd = origRdd
.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String t) throws Exception {
//A DynamoDB mapper I don't want to initialise every time
DynamoDBMapper mapper = new DynamoDBMapper(new AmazonDynamoDBClient(credentials));
Set<String> userFav = mapper.load(userDataDocument.class, userId).getFav();
return userFav;
}
});
Run Code Online (Sandbox Code Playgroud)
我希望有一个静态DynamoDBMapper mapper,我为每个执行者初始化一次,并且能够一遍又一遍地使用它.
由于它不是可序列化的,我无法在驱动器中初始化它并进行广播.
注意:这是一个答案(在所有工作者上有一个静态对象的正确方法),但它仅适用于Scala.