一、Spark-SQL连接Hive的配置
Spark-SQL支持与Hive无缝集成,可通过以下方式操作Hive:
-
内嵌Hive:无需额外配置,直接使用,但生产环境不推荐。
-
外部Hive:
将`hive-site.xml`、`core-site.xml`、`hdfs-site.xml`复制到Spark的`conf/`目录。
将MySQL驱动放入`jars/`目录,重启Spark服务即可连接Hive元数据。
- 代码操作Hive:
- 添加依赖`spark-hive`和`hive-exec`,配置`SparkSession`时启用Hive支持:
```scala
val spark = SparkSession.builder()
.enableHiveSupport()
.config("spark.sql.warehouse.dir", "hdfs://node01:9000/user/hive/warehouse")
.getOrCreate()
```
若遇权限问题,可设置`System.setProperty("HADOOP_USER_NAME", "node01")`。
二、实验:统计有效数据及用户分布
实验目标
统计满足条件(uid、phone、addr均非空)的有效数据条数,并找出用户数量最多的前20个地址。
实现步骤
- 数据预处理:
使用`get_json_object`解析JSON格式数据,提取所需字段:
```sql
SELECT
get_json_object(json_column, '$.uid') AS uid,
get_json_object(json_column, '$.phone') AS phone,
get_json_object(json_column, '$.addr') AS addr
FROM raw_table
```
- 过滤有效数据:
```sql
CREATE TEMPORARY VIEW valid_data AS
SELECT * FROM parsed_table
WHERE uid IS NOT NULL AND phone IS NOT NULL AND addr IS NOT NULL
```
- 统计结果:
- 有效数据总数:
```sql