2016-03-29 13 views

答えて

9

Kryoは、データをbyte[]というオブジェクトとして保存するだけなので、大きな影響を与えません。これはJavaでもシリアル化が高速です。

しかし、試してみる価値があるかもしれません。spark.serializerの設定を行い、クラッセを登録しないでください。

データには、MEMORY_ONLY_SERという名前を付けて保存し、spark.rdd.compressを有効にすると、データが圧縮されます。

Javaの では、これは、いくつかのCPUのオーバーヘッドを追加することができますが、それは問題ではないかもしれませんので、のPythonは、かなり遅く実行されます。また、GCを減らすか、より多くのデータをキャッシュすることで、計算時間を短縮できます。

参考:メーリングリストのMatei Zaharia's answer

+0

うわー、詳細な回答がとても速い!ありがとう。シリアライザ、または最適化のための独立した提案を参照して、 "何が作るかもしれない"の部分ですか? – Gerenuk

+0

これはKryoがPySparkに影響を与えないので、最適化のための示唆です。最初にテストすることをお勧めします。私はそれをテストするために過度にPySparkを使いませんし、パフォーマンスは多くのことに依存するかもしれません:設定、ユースケース、ネットワークなど – eliasah

4

これは、PySparkを言うときの意味によります。過去2年間、Sparkの開発と同じPySparkの開発は、低レベルのRDD APIからDataFrameMLのような高レベルのAPIに移行しました。

これらのAPIはJVMでネイティブに実装されており、Pythonコードは主にドライバで実行される一連のRPC呼び出しに限定されています。それ以外のものは、ScalaやJavaを使用して実行されるコードとほとんど同じコードなので、ネイティブアプリケーションと同じようにKryoのメリットがあります。

私は、PySparkでKryoを使用し、アプリケーションが「ネイティブ」APIに大きく依存している場合には、何かを得るために潜在的に何かを失うことはほとんどないと主張します。

関連する問題