Spark SQL, データフレーム および データセット ガイド
Spark SQL は構造化されたデータの処理のためのSparkモジュールです。基本のRDD API とは異なり、Spark SQLによって提供されるインタフェースは、Sparkにデータと実行されている計算の両方についての構造のもっと多くの情報を提供します。内部的には、Spark SQLはこの特別な上方を特別な最適化を実施するために使用します。SQLおよびデータセットAPIを含むSpark SQLとやり取りをする幾つかの方法があります。計算を表現するためにどのAPI/言語を使っているかに関係なく、結果を計算する時に同じ実行エンジンが使われます。この単一化は、開発者が指定された変換を表現するもっとも自然な方法に基づく異なるAPI間を容易に行き来できることを意味します。
このページの全ての例はSpark配布物に含まれるサンプルデータを使用し、spark-shell
, pyspark
シェルあるいは sparkR
シェルの中で実行することができます。
SQL
Spark SQLの一つの使い方は、SQLクエリを実行することです。Spark SQLは既存のHiveインストレーションからデータを読み込むために使うこともできます。この起動をどう設定するかの詳細については、 Hive テーブル の章を参照してください。他のプログラミング言語の中でSQLを実行する場合、結果はデータセット/データフレームとして返されるでしょう。command-line あるいは JDBC/ODBCを使ってSQLインタフェースとやり取りすることもできます。
データセットとデータフレーム
データセットはデータの分散型コレクションです。データセットはSparkSQLの最適化実行エンジンを使ってRDDの利点(強力なタイプ、強力なラムダ関数を使用する能力)を提供するSpark 1.6で追加された新しいインタフェースです。データセットはJVMオブジェクトから構築することができ、関数的な変形(map
, flatMap
, filter
など)を使って操作することができます。データセットAPIは Scala および Javaで利用可能です。PythonはデータセットAPIのためのサポートを持ちません。しかし、Pythonの動的な性質により、データセットAPIの多くの利点が既に利用可能です(たとえば自然に名前row.columnName
によって行のフィールドにアクセスすることができます)。Rの場合も似ています。
データフレームは、名前付きの列に整理されたデータセットです。リレーショナルデータベースでのテーブル、あるいはR/Pythonでのデータフレームと概念的に等価ですが、裏ではもっと最適化されています。データフレームは以下のようなソースの大きな配列です: 構造化されたデータファイル、Hiveのテーブル、外部データベース、あるいは既存のローカルのRDD。データフレームAPIはScala, Java, Python および R で利用可能です。Scalaと Javaでは、データフレームは Row
のデータセットによって表現されます。Scala APIでは、DataFrame
は単純にDataset[Row]
のタイプのエイリアスです。一方で、Java APIでは、ユーザはDataFrame
を表現するためにDataset<Row>
を使う必要があります。
このドキュメントの至る所で、データフレームとしてRow
のScala/Javaデータセットをしばしば参照するつもりです。