2016-09-19 8 views
4

私は寄木張りファイルに存在する500K行のスパークDataFrameを持っています。 Spark(RStudioとR 3.3.1)の中にspark 2.0.0とSparkRパッケージを使用しています。これらはすべて、4つのコアと8GBのRAMを持つローカルマシン上で動作します。SparkRの回収が遅いのはなぜですか?

私はRで作業することができるデータセットの構築を容易にするために、collect()メソッドを使用してDataFrameをRにします。これを行うには約3分かかります。 data.tableパッケージを使用する同等のサイズのCSVファイル。

確かに、寄木張りファイルは圧縮されており、圧縮解除に必要な時間が問題の一部になる可能性がありますが、インターネット上で収集方法が特に遅く、説明の方法がほとんどわかりません。

私はsparklyrで同じ操作を試みましたが、はるかに高速です。残念なことに、sparklyrには、SparkRと同じように簡単にジョインやフィルタの内部で日付パスを実行する機能がありません。そのため、SparkRを使用していません。また、両方のパッケージを同時に使用することはできません(つまり、SparkR呼び出しを使用してクエリを実行し、sparklyrを使用してこれらのスパークオブジェクトにアクセスする)。

誰も、SparkRのcollect()メソッドの相対的な遅さ、および/または任意の解決策について、同様の経験を持っていますか?

答えて

2

@Will

私は以下のコメントは、実際にあなたの質問に答えるかどうか知らないが、スパークが怠惰な操作を行います。 Spark(またはSparkR)で行われたすべての変換は、実際に従うべき論理的な計画を作成するだけのデータを作成するものではありません。

collectのようなアクションを実行すると、ソースRDDから直接データをフェッチする必要があります(キャッシュされていない、または永続化されていないと仮定します)。

データが十分ではなく、ローカルRで簡単に処理できる場合は、SparkRを使用する必要はありません。他の解決方法は、頻繁に使用するためにデータをキャッシュすることです。

+0

500Kの線の例は一例に過ぎず、300Mの行を持つテーブルから描画されます。 Sparkは私のセットアップでこの作業をする必要がありますが、SparkとRの間でデータを移動するのが遅いことは大きなスピードアップです。 –

1

短い:シリアル化/逆シリアル化は非常に遅いです。 私のブログの投稿を参照してくださいhttp://dsnotes.com/articles/r-read-hdfs しかし、sparkRとsparklyrの両方で同じように遅くなるはずです。

+1

説明とリンクをありがとう。これはRとSparkの間の現在のリンクの弱点であると思われますが、これはPythonの問題ではありませんが(まだ存在しています) –

+1

さらに、SparkRを取るのに180秒かかるのは、9秒間Sparklyrがかかることを確認したばかりです。だから、ここでは奇妙なことが起こっている。 –

+0

お役立ち情報見ています。プロトコルで何か新しいこと。 –

関連する問題