2016-04-08 9 views
2

、1つまたは2つの属性が必要な場合、我々は不必要に完全なオブジェクトをシリアル化しないように注意する必要がスパークScalaのインタフェースを使用しながら:(http://erikerlandson.github.io/blog/2015/03/31/hygienic-closures-for-scala-function-serialization/PySparkはマップラムダの '自己'参照オブジェクトをシリアライズしていますか?私の知る限り理解し

をPySparkを使用している場合、このしくみを教えてください。

class C0(object): 

    def func0(arg): 
    ... 

    def func1(rdd): 
    result = rdd.map(lambda x: self.func0(x)) 

この結果、完全なC0インスタンスが削除されますか?もしそうなら、それを避ける正しい方法は何ですか?

ありがとうございました。

答えて

3

これにより、この文書に記載された完全なC0インスタンスの酸洗いが行われます。http://spark.apache.org/docs/latest/programming-guide.html#passing-functions-to-spark。物語の

class C0(object): 

    def func0(self, arg): # added self 
    ... 

    def func1(self, rdd): # added self 
    func = self.func0 
    result = rdd.map(lambda x: func(x)) 

モラル:マップの呼び出しでどこでもselfキーワードを避けるため、それを避けるために

は、ような何かを行います。 Sparkは、ローカルクロージャで関数を計算できる場合には単一の関数をシリアライズすることに精通することができますが、selfへの参照はオブジェクト全体を直列化するよう強制します。

関連する問題