Spark SQL、DataFrames、およびDatasetsガイド
Spark SQLは、構造化データ処理のためのSparkモジュールです。基本的なSpark RDD APIとは異なり、Spark SQLによって提供されるインターフェースは、データと実行される計算の両方の構造に関する詳細な情報をSparkに提供します。内部的には、Spark SQLはこの追加情報を使用して追加の最適化を実行します。 SQLやDataset APIなど、Spark SQLと対話する方法はいくつかあります。結果を計算する場合、計算を表現するために使用しているAPI /言語に関係なく、同じ実行エンジンが使用されます。この統合により、開発者は、特定の変換を表現する最も自然な方法を提供するAPIに基づいて、異なるAPI間を簡単に切り替えることができます。
このページのすべての例では、Sparkディストリビューションに含まれるサンプルデータを使用しており、spark-shell
、pyspark
シェル、またはsparkR
シェルで実行できます。
SQL
Spark SQLの用途の1つは、SQLクエリを実行することです。 Spark SQLを使用して、既存のHiveインストールからデータを読み取ることもできます。この機能の設定方法の詳細については、Hiveテーブルセクションを参照してください。別のプログラミング言語内からSQLを実行すると、結果はDataset / DataFrameとして返されます。 コマンドラインまたはJDBC / ODBCを使用してSQLインターフェースと対話することもできます。
DatasetsとDataFrames
Datasetは、分散されたデータのコレクションです。 DatasetはSpark 1.6で追加された新しいインターフェースであり、RDDの利点(強力な型指定、強力なラムダ関数を使用できること)とSpark SQLの最適化された実行エンジンの利点を提供します。 Datasetは、JVMオブジェクトから構築し、関数変換(map
、flatMap
、filter
など)を使用して操作できます。 Dataset APIは、ScalaおよびJavaで使用できます。 PythonはDataset APIをサポートしていません。しかし、Pythonの動的な性質により、Dataset APIの多くの利点はすでに利用可能です(つまり、row.columnName
のように名前で自然に行のフィールドにアクセスできます)。 Rの場合も同様です。
DataFrameは、名前付き列に編成された* Dataset *です。これは、概念的にはリレーショナルデータベースのテーブルまたはR / Pythonのデータフレームと同等ですが、内部的にはより高度な最適化が行われています。 DataFrameは、構造化データファイル、Hiveのテーブル、外部データベース、既存のRDDなど、さまざまなソースから構築できます。 DataFrame APIは、Scala、Java、Python、およびRで使用できます。 ScalaとJavaでは、DataFrameはRow
のDatasetによって表されます。 Scala APIでは、DataFrame
は単にDataset [Row]
のタイプエイリアスです。一方、Java APIでは、ユーザーはDataset<Row>
を使用してDataFrame
を表す必要があります。
このドキュメント全体を通して、Row
のScala / Java DatasetsをDataFramesと呼ぶことがよくあります。