Spark Connect 快速入门远程连接 Spark 集群实战
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。
source ~/.profile
$HOME/sbin/start-connect-server.sh
第一行用于加载环境变量,第二行用于启动 Spark Connect Server。
3. 连接前先停止普通 SparkSession
在创建远程 Spark Connect 会话之前,需要先停止已有的普通本地 SparkSession,因为普通 SparkSession 和远程 Spark Connect Session 不能共存。
from pyspark.sql import SparkSession
SparkSession.builder.master("local[*]").getOrCreate().stop()
4. 创建远程 SparkSession
服务端启动后,就可以在客户端通过 remote 方法连接 Spark Connect Server。
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 基本一致。
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))
])
查看结果:
df.show()
输出如下:
+---+---+-------+----------+-------------------+
| 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. 一个最小可运行示例
下面是一段可以直接跑通的最小示例。
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 是一个值得重点关注的能力。
更多推荐




所有评论(0)