Spark-sql-hive-tables

提供:Dev Guides
移動先:案内検索

Spark SQL-Hiveテーブル

Hiveは、 SQLContext を継承する HiveContext としてSparkライブラリにバンドルされています。 HiveContextを使用すると、HiveMetaStoreでテーブルを作成および検索し、HiveQLを使用してクエリを書き込むことができます。 既存のHiveデプロイメントを持たないユーザーでも、HiveContextを作成できます。 hive-site.xml で構成されていない場合、コンテキストは metastore_db というメタストアと warehouse というフォルダーを現在のディレクトリに自動的に作成します。

Hiveテーブルを使用した employee レコードの次の例を考えてみましょう。 記録されたデータはすべて、 employee.txt という名前のテキストファイルにあります。 ここでは、まずHiveContextオブジェクトを初期化します。 それを使用して、テーブルを作成し、HiveQL言語を使用して従業員レコードデータをロードし、それにクエリを適用します。

*employee.txt* -spark-shellが実行されている現在のディレクトリに配置します。
1201, satish, 25
1202, krishna, 28
1203, amith, 39
1204, javed, 23
1205, prudvi, 23

Sparkシェルを起動します

まず、Spark Shellを起動する必要があります。 HiveTablesを使用するということは、Hive MetaStoreで作業しているということです。 したがって、システムはテーブルデータを格納するためのウェアハウスを自動的に作成します。 したがって、スーパーユーザーでSpark Shellを実行することをお勧めします。 次のコマンドを検討してください。

$ su
password:
#spark-shell
scala>

SQLContextオブジェクトを作成する

HiveContextをSparkシェルに初期化するには、次のコマンドを使用します

scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

HiveQLを使用してテーブルを作成する

次のコマンドを使用して、フィールド idname 、および age を持つ employee という名前のテーブルを作成します。 ここでは、 HiveQL 構文の Create ステートメントを使用しています。

scala> sqlContext.sql("CREATE TABLE IF NOT EXISTS employee(id INT, name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'")

HiveQLを使用してデータをテーブルにロードする

次のコマンドを使用して、従業員レコードデータを従業員テーブルにロードします。 正常に実行されると、指定された従業員レコードはスキーマに従って employee テーブルに保存されます。

scala> sqlContext.sql("LOAD DATA LOCAL INPATH 'employee.txt' INTO TABLE employee")

テーブルからフィールドを選択

テーブルに対してあらゆる種類のSQLクエリを実行できます。 HiveQL選択クエリを使用してすべてのレコードを取得するには、次のコマンドを使用します。

scala> val result = sqlContext.sql("FROM employee SELECT id, name, age")

レコードデータを表示するには、結果のDataFrameで* show()*メソッドを呼び出します。

scala> result.show()

出力

<console>:26, took 0.157137 s
+------+---------+----+
|  id  | name    |age |
+------+---------+----+
| 1201 | Satish  | 25 |
| 1202 | Krishna | 28 |
| 1203 | amith   | 39 |
| 1204 | javed   | 23 |
| 1205 | prudvi  | 23 |
+------+---------+----+