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-shellpysparkシェル、または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オブジェクトから構築し、関数変換(mapflatMapfilterなど)を使用して操作できます。 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と呼ぶことがよくあります。