Spark SQL - Hive 表
Hive 与 Spark 库捆绑在一起,作为 HiveContext,它继承自 SQLContext。使用 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 Shell
首先,我们必须启动 Spark Shell。使用 HiveTables means we are working on Hive MetaStore. Hence, the system will automatically create a warehouse for storing table data. Therefore, it is better to run Spark Shell on super user. Consider the following command.
$ su password: #spark-shell scala>
创建 SQLContext 对象
使用以下命令将 HiveContext 初始化到 Spark Shell 中
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
使用 HiveQL 创建表
使用以下命令创建一个名为 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 ' '")
使用 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 | +------+---------+----+