1. 什么是 Spark Connect
Spark Connect 是 Spark 提供的一种远程连接能力,它把客户端和 Spark 服务端解耦开来。客户端通过 DataFrame API 描述计算逻辑,服务端负责真正执行 Spark 任务并返回结果。
可以把它理解成:你继续写熟悉的 PySpark DataFrame 代码,但真正执行计算的不再是本地会话,而是远程 Spark 服务端。
2. 启动 Spark Connect 服务端
要使用 Spark Connect,首先需要启动支持 Spark Connect 的 Spark 服务端。官方 Quickstart 中使用的是 start-connect-server.sh。
bash
source ~/.profile
$HOME/sbin/start-connect-server.sh
第一行用于加载环境变量,第二行用于启动 Spark Connect Server。
3. 连接前先停止普通 SparkSession
在创建远程 Spark Connect 会话之前,需要先停止已有的普通本地 SparkSession,因为普通 SparkSession 和远程 Spark Connect Session 不能共存。
python
from pyspark.sql import SparkSession
SparkSession.builder.master("local[*]").getOrCreate().stop()
4. 创建远程 SparkSession
服务端启动后,就可以在客户端通过 remote 方法连接 Spark Connect Server。
python
from pyspark.sql import SparkSession
spark = SparkSession.builder.remote("sc://localhost:15002").getOrCreate()
这里的 sc://localhost:15002 表示当前客户端要连接到本机 15002 端口上的 Spark Connect 服务端。
5. 使用 Spark Connect 创建 DataFrame
远程 SparkSession 创建成功后,后续的 DataFrame 使用方式和普通 Spark 基本一致。
python
from datetime import datetime, date
from pyspark.sql import Row
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
查看结果:
python
df.show()
输出如下:
text
+---+---+-------+----------+-------------------+
| a| b| c| d| e|
+---+---+-------+----------+-------------------+
| 1|2.0|string1|2000-01-01|2000-01-01 12:00:00|
| 2|3.0|string2|2000-02-01|2000-01-02 12:00:00|
| 4|5.0|string3|2000-03-01|2000-01-03 12:00:00|
+---+---+-------+----------+-------------------+
这说明 Spark Connect 改变的是连接方式和执行位置,而不是 DataFrame 的基本使用习惯。
6. 一个最小可运行示例
下面是一段可以直接跑通的最小示例。
python
from pyspark.sql import SparkSession
from pyspark.sql import Row
from datetime import datetime, date
# 停止已有的普通 SparkSession
SparkSession.builder.master("local[*]").getOrCreate().stop()
# 创建远程 Spark Connect Session
spark = SparkSession.builder.remote("sc://localhost:15002").getOrCreate()
# 创建 DataFrame
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
# 查看数据
df.show()
7. Spark Connect 的核心价值
Spark Connect 最核心的价值在于解耦。
传统方式下,客户端和 Spark 执行环境关系较紧;而 Spark Connect 让客户端只负责表达计算逻辑,服务端负责执行任务。这种模式更适合远程开发、Notebook 连接远程 Spark、平台化建设以及服务化接入。
从开发者视角看,最大的好处是:API 习惯几乎不变,但 Spark 的使用方式变得更灵活了。
8. 总结
Spark Connect 不是单纯多了一种连接方式,而是让 Spark 从本地绑定式使用走向远程服务式使用。你依然使用熟悉的 DataFrame API,但真正的计算发生在远程 Spark 服务端。对于需要远程连接 Spark、构建轻量客户端或做平台化接入的场景来说,Spark Connect 是一个值得重点关注的能力。