私は、KryoシリアライザがApache Sparkで使用すると、より高速なシリアル化を提供できることを読んだ。しかし、私はPythonを使ってSparkを使っています。Pysparkの使用時にKryoシリアライザのメリットはありますか?
Kryoシリアライザに切り替えると、まだメリットはありますか?
私は、KryoシリアライザがApache Sparkで使用すると、より高速なシリアル化を提供できることを読んだ。しかし、私はPythonを使ってSparkを使っています。Pysparkの使用時にKryoシリアライザのメリットはありますか?
Kryoシリアライザに切り替えると、まだメリットはありますか?
Kryo
は、データをbyte[]
というオブジェクトとして保存するだけなので、大きな影響を与えません。これはJavaでもシリアル化が高速です。
しかし、試してみる価値があるかもしれません。spark.serializer
の設定を行い、クラッセを登録しないでください。
データには、MEMORY_ONLY_SER
という名前を付けて保存し、spark.rdd.compress
を有効にすると、データが圧縮されます。
参考:メーリングリストのMatei Zaharia's answer
これは、PySparkを言うときの意味によります。過去2年間、Sparkの開発と同じPySparkの開発は、低レベルのRDD APIからDataFrame
やML
のような高レベルのAPIに移行しました。
これらのAPIはJVMでネイティブに実装されており、Pythonコードは主にドライバで実行される一連のRPC呼び出しに限定されています。それ以外のものは、ScalaやJavaを使用して実行されるコードとほとんど同じコードなので、ネイティブアプリケーションと同じようにKryoのメリットがあります。
私は、PySparkでKryoを使用し、アプリケーションが「ネイティブ」APIに大きく依存している場合には、何かを得るために潜在的に何かを失うことはほとんどないと主張します。
うわー、詳細な回答がとても速い!ありがとう。シリアライザ、または最適化のための独立した提案を参照して、 "何が作るかもしれない"の部分ですか? – Gerenuk
これはKryoがPySparkに影響を与えないので、最適化のための示唆です。最初にテストすることをお勧めします。私はそれをテストするために過度にPySparkを使いませんし、パフォーマンスは多くのことに依存するかもしれません:設定、ユースケース、ネットワークなど – eliasah