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

相关推荐
还有多久拿退休金27 分钟前
一个 var 让整个团队加班到凌晨——JS 闭包的那些暗坑
前端·javascript
weedsfly27 分钟前
用了 React/Vue 之后,这些 DOM 操作的坑你踩过几个?
前端·javascript
Asize30 分钟前
Ajax 入门:从 JSON 序列化到 XMLHttpRequest
前端·javascript·前端框架
铁皮饭盒1 小时前
@kognitivedev/rag, 用js做AI Agent开发
javascript·后端
kyriewen13 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
To_OC15 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
GuWenyue17 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
何时梦醒17 小时前
深入理解递归与快速排序 —— 从基础入门到手写实现
前端·javascript
bonechips17 小时前
LLM 的无状态:从 HTTP 协议到对话上下文工程
前端·javascript
胡志辉17 小时前
从 prototype 到 V8,看懂 JavaScript 原型链
前端·javascript