我正在尝试使用Spark(在Scala中)做些事情。我有一个Transformer
类,看起来像这样:映射到Spark中的RDD的方法
class Transformer(transformerParameters: TransformerParameters) {
// Process the parameters
def transform(element: String): String = {
// Do stuff
}
}
我想这样做
val originalRDD = sc.textFile("blah")
val transformer = new Transformer(parameters)
val transformedRDD = originalRDD.map(transformer.transform)
假设我不想或不能使Transformer
类序列化,并进一步假设TransformerParameters
其实是序列化的,我见过的人建议编写,而不是(或者我可能误解):
val transformedRDD = originalRDD.map(new Transformer(parameters).transform)
我很科幻ne在集群的每个JVM上创建一个新的Transformer
实例,但看起来像这样会为每一行创建一个新的Transformer
,这看起来没有必要且可能非常昂贵。这究竟是什么?有没有办法为每一行创建一个新实例?
谢谢!
这很有道理。这是一种正常的做事方式,还是我想做一些非常单一的事情? – zale
我相信是这样,至少在Spark中(以及主要来自Java背景的人) - 这就是我在这种情况下所做的。最有可能采用更灵活的方式来做到这一点,但我还没有发现它! –