spark sql 的语法
时间: 2025-05-24 22:01:16 浏览: 47
### Spark SQL 语法使用指南
Spark SQL 提供了一种强大的方式来处理结构化和半结构化数据,支持标准的 SQL 查询以及 DataFrame 和 Dataset API。以下是关于 Spark SQL 语法的一些核心概念和使用方法:
#### 1. 创建表
在 Spark SQL 中,可以通过多种方式创建临时视图或持久化的 Hive 表。
- **基于现有 RDD 或 DataFrames 创建临时视图**
```scala
val df = spark.read.json("examples/src/main/resources/people.json")
df.createOrReplaceTempView("people") // 创建一个名为 people 的临时视图[^1]
```
- **创建永久表 (Hive 支持)**
如果启用了 Hive 支持,则可以创建永久表。
```sql
CREATE TABLE IF NOT EXISTS employees (
name STRING,
salary FLOAT
) USING PARQUET;
```
---
#### 2. 执行 SQL 查询
一旦定义了表或视图,就可以通过 `spark.sql` 方法运行 SQL 查询。
- **基本查询**
```sql
SELECT * FROM people WHERE age > 30; -- 基本过滤条件[^1]
```
- **聚合操作**
```sql
SELECT department, COUNT(*) AS count
FROM employees GROUP BY department ORDER BY count DESC; -- 聚合并排序[^1]
```
- **连接操作**
```sql
SELECT e.name, d.department_name
FROM employees e JOIN departments d ON e.dept_id = d.id; -- 连接两个表[^1]
```
---
#### 3. 参数设置与性能优化
为了提高 Spark SQL 的执行效率,可以根据具体场景调整配置参数。
- **ORC 文件拆分策略**
```sql
SET spark.hadoop.hive.exec.orc.split.strategy=ETL; -- 设置 ORC 文件拆分策略为 ETL[^2]
```
- **文件切片大小控制**
```sql
SET spark.hadoop.mapreduce.input.fileinputformat.split.maxsize=64000000; -- 控制最大切片大小为 64MB[^2]
SET spark.hadoop.mapreduce.input.fileinputformat.split.minsize=64000000; -- 控制最小切片大小为 64MB[^2]
```
- **避免分区合并**
```sql
SET spark.hadoopRDD.targetBytesInPartition=-1; -- 禁用目标字节数限制以防止不必要的分区合并[^2]
```
---
#### 4. UDF 定义与注册
用户自定义函数(UDF)允许扩展内置功能。
- **Scala/Python 注册 UDF 示例**
```scala
import org.apache.spark.sql.functions.udf
// Scala 版本
val toUpperUdf = udf((str: String) => str.toUpperCase())
val resultDf = df.withColumn("upperName", toUpperUdf($"name"))
// Python 版本
from pyspark.sql.functions import udf
to_upper_udf = udf(lambda s: s.upper() if s is not None else "", StringType())
result_df = df.withColumn("upperName", to_upper_udf(df["name"]))
```
---
#### 5. 数据保存
完成计算后,可将结果写入外部存储系统。
- **保存为 Parquet 格式**
```scala
df.write.mode("overwrite").parquet("/path/to/output.parquet"); -- 将结果保存为 Parquet 文件
```
- **保存为 CSV 格式**
```scala
df.write.option("header", "true").csv("/path/to/output.csv"); -- 添加头部信息并将结果保存为 CSV 文件
```
---
### 总结
以上介绍了 Spark SQL 的基础语法及其一些高级特性,包括如何创建表、执行复杂查询、优化性能以及定义 UDF 函数等内容。这些工具可以帮助开发人员更高效地利用 Spark 处理大规模数据集。
阅读全文
相关推荐


















