Spark-sql-hive-tables
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を使用してテーブルを作成する
次のコマンドを使用して、フィールド id 、 name 、および 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 |
+------+---------+----+