Spark SQLを使用したデータのクエリー
Spark SQLでは、SQL言語のバリエーションを使用してSparkクエリーを実行できます。
Spark SQLでは、SQL言語のバリエーションを使用してSparkクエリーを実行できます。Spark SQLには、Spark Dataset
をScalaとJavaに返し、対話形式でSQLシェルを使用するためのAPIが含まれています。
Spark SQLの基礎
DSEでは、DSEクラスターに格納され、Sparkを使用して実行されるデータに対して、Spark SQLを使用したリレーショナル・クエリーを実行できます。Spark SQLは、分散されたデータ・コレクションにまたがって問い合わせを行うための統一リレーショナル・クエリー言語であり、リレーショナル・データベースで使用されるSQL言語のバリエーションをサポートします。Spark SQLは、Sparkデータ・セットに対してSQLクエリーを実行する機能を含んでおり、SharkおよびHiveに取って代わるクエリー言語として設計されています。従来型SparkアプリケーションをSpark SQLクエリーと組み合わせて使用すると、大規模なデータセットを分析することができます。
SparkSessionクラスとそのサブクラスは、リレーショナル・クエリーをSparkで実行するためのエントリー・ポイントです。
DataFrameは、名前が付けられたカラム内に編成されたSpark Dataset
で、従来のリレーショナル・データベースのテーブルと似ています。CSVファイルやSpark RDDなど、どのSparkデータ・ソースからでもDataFrameインスタンスを作成でき、DSEの場合はデータベースにテーブルを作成できます。DSEでは、DSEトランザクション・クラスター内のデータからSpark SQLテーブルにアクセスする際、テーブルをHiveメタストアに登録することから、そのテーブルに対してSQLクエリーを実行することができます。
Spark SQLシェルの起動
Spark SQLシェルを使用して、対話形式でSpark SQLクエリーを実行できます。シェルを起動するには、dse spark-sql
を実行します。
dse spark-sql
DSE内のSpark SQLシェルは自動的にSparkセッションを作成して、Spark SQL Thriftサーバーに接続してベースとなるJDBC接続に対処します。
Spark SQLセッションでベースとなるデータベース・テーブルのスキーマが変更された場合(CQLを使用して列が追加された場合など)は、テーブルをドロップし、メタストアを更新して、適切なスキーマでテーブルに対してクエリーの実行を続けてください。
DROP TABLE tablename; SHOW TABLES;
スキーマが変更されたテーブルに対するクエリーは、ランタイム例外を引き起こします。
Spark SQLの制限事項
- あるファイル・システムから、別のファイル・システムのテーブルにデータを読み込むことはできません。
CREATE TABLE IF NOT EXISTS test (id INT, color STRING) PARTITIONED BY (ds STRING); LOAD DATA INPATH 'hdfs2://localhost/colors.txt' OVERWRITE INTO TABLE test PARTITION (ds ='2008-08-15');
最初の行により、デフォルトのファイル・システムにテーブルが作成されます。二行目は、別のファイル・システムのパスからそのテーブルにデータを読み込もうとしますが、失敗します。