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

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 是一个值得重点关注的能力。

相关推荐
qq_120840937114 分钟前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机
漂流瓶jz2 小时前
运行时vs编译时:CSS in JS四种主流方案介绍和对比
前端·javascript·css
钮钴禄·爱因斯晨2 小时前
他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!
java·开发语言·前端·javascript·css·html
Watermelo6172 小时前
理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
前端·javascript·vue.js·chrome·nginx·正则表达式·seo
Hello--_--World3 小时前
JS:this指向、bind、call、apply、知识点与相关面试题
开发语言·javascript·ecmascript
jserTang3 小时前
手撕 Claude Code-4: TodoWrite 与任务系统
前端·javascript·后端
腹黑天蝎座3 小时前
大屏开发必读:Scale/VW/Rem/流式/断点/混合方案全解析(附完整demo)
前端·javascript
jserTang3 小时前
手撕 Claude Code-5:Subagent 与 Agent Teams
前端·javascript·后端
于慨4 小时前
mac安装flutter
javascript·flutter·macos
光影少年4 小时前
前端工程化升级
前端·javascript·react.js·前端框架