(これは、spark 1.1 を念頭に置いて書かれています。新しい機能がすぐに追加される傾向があることに注意してください。以下で説明するいくつかの制限は、将来のある時点で完全になくなる可能性があります)。
Hive 構文で Spark SQL を使用し、Hive メタストアに接続すると、Hive を介して直接実行された場合と同じデータ空間で Spark SQL ハイブ コマンドが実行されます。
これを行うには、ここで説明されているように HiveContext をインスタンス化し、Hive メタストアの場所などを指定する hive-site.xml 構成ファイルを提供するだけです。
SELECT ステートメントの結果は SchemaRDD です。これは、関連付けられたスキーマを持つ Row オブジェクトの RDD です。キャッシュや永続化を含む任意の RDD を使用するのと同じように使用でき、効果は同じです (データがハイブから取得されるという事実はここでは影響しません)。
"CREATE TABLE ..." などのハイブ コマンドがデータを作成している場合、対応するテーブルは、通常のハイブとまったく同じ場所 (つまり、デフォルトでは /var/lib/hive/warehouse) に作成されます。
Spark を介して Hive SQL を実行すると、Spark のすべてのキャッシュの利点が得られます。通常、同じ Spark コンテキスト内の同じデータ セットに対して 2 番目の SQL クエリを実行すると、最初のクエリよりもはるかに高速になります。
Spark 1.1 以降、Thrift JDBC サーバーを起動できます。これは本質的に HiveServer2 と同等であり、JDBC 接続を介して SparkQL コマンドを実行できます。
すべての Hive 機能が利用できるわけではないことに注意してください (まだ?) 。詳細については、こちらを参照してください。
最後に、Hive 構文とメタストアを破棄して、CSV ファイルと Parquet ファイルで直接 SQL クエリを実行することもできます。現時点では、このように利用できる SQL 機能のセットは、Hive 構文を使用する場合よりも少ないですが、将来的にはこれが推奨されるアプローチになると推測しています。