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

相关推荐
半个落月2 小时前
LangChain.js Agent Memory 实战(下):用 Milvus 构建可检索的长期记忆
javascript·langchain
半个落月2 小时前
LangChain.js Agent Memory 实战(上):从内存对话、文件持久化到截断与摘要
javascript·langchain
linux_cfan5 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
何何____7 小时前
Vue 生命周期详解
前端·javascript
默_笙8 小时前
💫 闭包是个背包:拆解小米前端面试题里的三道"闭包陷阱"
前端·javascript·面试
尾善爱看海11 小时前
《JavaScript 数组操作全攻略:12 类 API + 30 个实战场景 + 20 个避坑指南》
前端·javascript·面试
OpsEye11 小时前
为什么你的 Agent 莫名烧钱?聊聊循环调用的兜底方案
javascript·ai编程
linux_cfan12 小时前
16 · `custom-media-element`:属性拦截与转发
前端·javascript·音视频
右耳朵猫AI12 小时前
Web前端周刊2026W38 | React 19.3 发布、StyleX 深潜、jsdom 30.1 提速
前端·javascript·react.js·typescript·node.js
落魄大学生之流水线上谋生计12 小时前
GreenLife Carbon · OpenHarmony 智慧低碳生态平台
javascript