このトピックでは、Spark SQL、データセット、およびデータフレームについて紹介し、Spark SQL を使用して基本的な操作を実行する方法について説明します。
はじめに
Spark SQL は、構造化データ処理用の Spark モジュールです。Spark の Resilient Distributed Dataset(RDD)の基本 API と比較して、Spark SQL のインターフェースは、データとコンピューティングに関するより構造化された情報を提供します。Spark SQL は、SQL クエリを実行したり、Hive テーブルからデータを読み込んだりするために使用できます。
データセットとは、分散されたデータのコレクションです。Spark 1.6 で新しく開発されたインターフェースとして、データセットは RDD と Spark SQL の両方の利点を統合しています。データセットは、Java 仮想マシン(JVM)オブジェクトから構築し、map、filterMap、filter などの関数型変換を使用して管理できます。データセット API は Scala と Java では使用できますが、Python や R では使用できません。ただし、Python と R の動的な性質により、データセット API の多くの利点は Python と R でも利用できます。
データフレームは、名前付きの列に編成されたデータセットです。これは、リレーショナルデータベースのテーブルと概念的に同等です。データフレームは、構造化データファイル、Hive テーブル、外部データベース、既存の RDD など、多くのソースから構築できます。データフレーム API は、Scala、Java、Python、および R で使用できます。Scala または Java のデータフレームは、行のデータセットによって表されます。Scala API では、データフレームは Dataset[Row] の型エイリアスです。Java API では、データフレームは Dataset<Row> で表されます。
Spark SQL を使用して基本操作を実行する
Spark SQL を使用すると、SQL ステートメントを使用してデータを管理できます。Spark は、使用する SQL ステートメントを解析、最適化、および実行します。
- 例 1:Spark はさまざまな形式のデータをサポートしています。この例では、Spark は JSON 形式のデータを読み取り、Parquet 形式のデータを生成します。サンプルコード:
val peopleDF = spark.read.json("examples/src/main/resources/people.json") // JSON 形式のデータを読み込みます。 peopleDF.write.parquet("people.parquet") // Parquet 形式のデータを生成します。 - 例 2:Spark は、parquetFile テーブルから年齢が 13~19 歳の人々の名前を読み取り、名前データをデータフレームに変換し、map 変換を使用してデータフレームを読み取り可能な形式で生成します。サンプルコード:
val namesDF = spark.sql("SELECT name FROM parquetFile WHERE age BETWEEN 13 AND 19") // parquetFile テーブルから名前データを読み取ります。 namesDF.map(attributes => "Name: " + attributes(0)).show() // データフレームを読み取り可能な形式で生成します。