2016-07-09 5 views
1

下記のテキストを意味は、関数を渡すと機能を含むオブジェクトをシリアライズ不注意 ときに注意するLearning Spark機能を含むオブジェクトシリアライズ -

一つの問題の第3章からです。オブジェクトのメンバーである 関数を渡すか、またはオブジェクト内のフィールド(たとえばself.field)に フィールドへの参照を渡すと、Sparkはオブジェクト 全体をワーカーノードに送信します。情報 が必要です(例3-19を参照)。場合によっては、これにより、 プログラムが失敗することもあります。クラスにPythonが受け入れることができないオブジェクトが含まれている場合は、 が失敗する可能性があります。

enter image description here

著者はここに伝えようと何のメッセージ説明してください。

+0

私は著者が間違っていると思うのは、変数がPythonでどのように動作するかを理解していないからです。おそらく安全な例では、 'query'は' self.query'の別の名前なので、結果は同じになります。 – martineau

答えて

1

分散システムのワーカーには共有メモリがないため、各ワーカーはコードを実行するために必要なすべての機能、データなどのコピーを持たなければなりません。したがって、配布される予定のコールを作成するときは、実際には必要のないものをコピーしていないことを確認して、このオーバーヘッドを減らそうとする必要があります。

この例では、rdd.filterは、ベクトル化された(機能的な)操作であり、複数の作業者に分散させることができます。関数である単一の引数をとります。作者は、その関数が任意のオブジェクトのフィールド(属性)を参照する場合(selfは内部用語オブジェクトが自身を参照するために使用するため、基本的には独自のメソッド内でfilterメソッドを呼び出すオブジェクトを参照します)オブジェクト全体(インスタンス)は、軽量関数だけでなく、ワーカーにコピーされます。オブジェクトには、多くのデータを参照する多くの属性を含めることができます。

関連する問題