2017-08-14 3 views
1

DataFrame(例:100GBのテーブル)をキャッシュしようとしていて、キャッシュのクエリを実行すると、フルテーブルスキャンが実行されますか?DataFrameスパークがどのようにデータをインデックス化するか。スパークのドキュメントは言う:キャッシュクエリのパフォーマンスSpark

スパークSQLはspark.catalog.cacheTable(「tableNameの」)またはdataFrame.cacheを呼び出す ことにより、メモリ内の柱状の形式を使用して表をキャッシュすることができます()。 Spark SQLは必要な列のみをスキャンし、自動的にメモリ使用量とGC圧力を最小限に抑えるように圧縮を調整します( )。 メモリからテーブルを削除するには、spark.catalog.uncacheTable( "tableName")を呼び出します。誰かが声明を下回るについて詳細に説明したり、それが

「次に大きなキャッシュされたデータフレームにクエリを最適化する方法ならば、私は完全に声明の上に理解していなかった

http://spark.apache.org/docs/latest/sql-programming-guide.html#caching-data-in-memory

は、それは本当に参考になりますSpark SQLは必要な列のみをスキャンして自動的に行います。

チューン圧縮 "

+0

.explain()メソッドからクエリプランを提供できますか? – addmeaning

答えて

0

私はそれが全表スキャンを実行します、キャッシュされたDataFrameにクエリを実行しますか?スパークがどのようにデータをインデックス化するか。

いくつかのマイナーな最適化が可能ですが、Sparkはデータのインデックスを作成しません。だから一般的なケースでは、Sparkが完全なデータスキャンを実行すると仮定する必要があります。

ただし、早期予測を適用することはできます。したがって、クエリで列のサブセットのみが使用されている場合、Sparkは必要なこれらの項目のみにアクセスできます。

柱状店は、圧縮とスパークのための良好な候補である圧縮方式(RunLengthEncodingDictEncodingBooleanBitSetIntDeltaLongDelta)の数をサポートしています。列のタイプと計算された統計値に応じて、Sparkは自動的に適切な圧縮形式を選択したり、圧縮をスキップしたりすることができます。

一般的に、柱状記憶で使用される圧縮スキームは、圧縮データの照会を可能にし、一部は(RLEのような)効率的な選択に使用できます。同時に、ディスクにデータを取り込まずにメモリに保存してアクセスできる量のデータを増やすことができます。

関連する問題