Spark SQLは、構造化データ処理用のSparkモジュールです。 基本的な Spark RDD API とは異なり、Spark SQL が提供するインターフェイスは、データと実行される計算の両方の構造に関するより多くの情報を Spark に提供します。 内部的には、Spark SQLはこの余分な情報を使用して余分な最適化を実行します。 Spark SQLと対話する方法は、SQLとデータセットAPIを含めていくつかあります。 結果を計算する際には、どのAPI/言語を使って計算を表現しているかに関わらず、同じ実行エンジンが使用されます。 この統一は、開発者が、与えられた変換を表現する最も自然な方法を提供するものに基づいて、異なるAPI間を容易に行き来できることを意味します。
このページのすべての例は、Spark ディストリビューションに含まれるサンプル データを使用し、spark-shell
、pyspark
シェル、または sparkR
シェルで実行できます。
SQL
Spark SQL の 1 つの使用方法は、SQL クエリーを実行することです。 この機能の設定方法については、「Hive テーブル」のセクションを参照してください。 また、コマンドラインを使用して、または JDBC/ODBC を介して SQL インターフェイスと対話することもできます。データセットは Spark 1.6 で追加された新しいインターフェイスで、RDD の利点 (強力な型付け、強力なラムダ関数の使用) と Spark SQL の最適化実行エンジンの利点を提供します。 データセットはJVMオブジェクトから構築され、関数型変換(map
, flatMap
, filter
など)を使って操作することができます。データセットAPIは、ScalaとJavaで利用可能です。 PythonはDataset APIをサポートしていない。 しかし、Pythonの動的な性質により、Dataset APIの利点の多くはすでに利用可能です(例えば、行のフィールドに名前で自然にアクセスできますrow.columnName
)。 R の場合も同様です。
A DataFrame は、名前付き列に編成されたデータセットです。 これは、リレーショナル データベースのテーブルまたは R/Python のデータ フレームと概念的に等しいものですが、フードの下に豊富な最適化が施されています。 DataFrame APIはScala、Java、Python、Rで利用できます。ScalaとJavaでは、DataFrameはRow
sのDatasetで表現されます。Scala と Java では、DataFrame は Row
s のデータセットで表されます。Scala API では、DataFrame
は Dataset
の型エイリアスですが、Java API では DataFrame
を表すには Dataset<Row>
を使用する必要があります。