Spark SQL - Hive表

2018-12-20 16:55 更新
Hive與Spark庫捆綁為HiveContext,它繼承自SQLContext。 使用HiveContext,您可以在HiveMetaStore中創(chuàng)建和查找表,并使用HiveQL在其上寫入查詢。 沒有現(xiàn)有Hive部署的用戶仍然可以創(chuàng)建HiveContext。 當(dāng)未由hive-site.xml配置時,上下文會自動在當(dāng)前目錄中創(chuàng)建名為metastore_db的元數(shù)據(jù)庫和名為warehouse的文件夾。

參考以下案例使用Hive表完成雇員記錄。 所有記錄的數(shù)據(jù)都在名為employee.txt的文本文件中。 這里,我們將首先初始化HiveContext對象。 使用它,我們將創(chuàng)建一個表,使用HiveQL語言將雇員記錄數(shù)據(jù)加載到其中,并對其應(yīng)用一些查詢。

employee.txt - 將其放在spark-shell正在運行的當(dāng)前目錄中。

1201, satish, 25
1202, krishna, 28
1203, amith, 39
1204, javed, 23
1205, prudvi, 23
啟動Spark Shell
首先,我們必須啟動Spark Shell。 使用HiveTables意味著我們正在處理Hive MetaStore。 因此,系統(tǒng)將自動創(chuàng)建用于存儲表數(shù)據(jù)的倉庫。 因此,最好在超級用戶上運行Spark Shell。 請參考以下命令。

$ su
password:
#spark-shell
scala>

創(chuàng)建SQLContext對象 

使用以下命令將HiveContext初始化到Spark Shell中。

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

使用HiveQL創(chuàng)建表 

使用以下命令創(chuàng)建名為employee的表,其字段為id,name和age。這里,我們使用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將數(shù)據(jù)加載到表中 

使用以下命令將員工記錄數(shù)據(jù)加載到員工表中。如果成功執(zhí)行,給定的員工記錄將按照模式存儲在 employee 中。

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

從表中選擇字段 

我們可以在表中執(zhí)行任何類型的SQL查詢。使用以下命令可以使用HiveQL select查詢獲取所有記錄。

scala> val result = sqlContext.sql("FROM employee SELECT id, name, age")
要顯示記錄數(shù)據(jù),請對結(jié)果DataFrame調(diào)用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 |
+------+---------+----+

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號