Spark SQL、DataFrame、および Dataset ガイド
Spark SQL は、構造化データ処理のための Spark モジュールです。基本的な Spark RDD API とは異なり、Spark SQL が提供するインターフェイスは、データとその実行される計算の構造に関する追加情報を Spark に提供します。内部的に、Spark SQL はこの追加情報を使用して、さらなる最適化を実行します。Spark SQL と対話する方法はいくつかあり、SQL および Dataset API が含まれます。結果を計算する際に、計算を表現するために使用する API/言語に関係なく、同じ実行エンジンが使用されます。この統合により、開発者は、特定の変換を表現するのに最も自然な方法を提供する API を、簡単に切り替えることができます。
このページで示されるすべての例では、Spark ディストリビューションに含まれるサンプルデータが使用されており、spark-shell、pyspark シェル、または sparkR シェルで実行できます。
SQL
Spark SQL の使用方法の 1 つは、SQL クエリを実行することです。Spark SQL は、既存の Hive インストールからデータを読み取るためにも使用できます。この機能の構成方法の詳細については、Hive テーブル セクションを参照してください。別のプログラミング言語から SQL を実行する場合、結果は Dataset/DataFrame として返されます。コマンドライン、または JDBC/ODBC を使用して SQL インターフェイスと対話することもできます。
Dataset と DataFrame
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 は、Python、Scala、Java、および R で利用できます。Scala および Java では、DataFrame は Row の Dataset として表されます。Scala API では、DataFrame は単に Dataset[Row] の型エイリアスです。一方、Java API では、ユーザーは DataFrame を表すために Dataset<Row> を使用する必要があります。
このドキュメント全体を通して、Scala/Java の Row の Dataset を DataFrame と呼ぶことがあります。