本地运行pyspark只需安装python、pyspark和jupyter,通过local[*]启动单机调试;连接远程spark集群则必须依赖livy服务与sparkmagic,配置正确url、认证及内核后使用%%spark魔法命令。

本地装 Jupyter 并直接运行 Spark(比如 pyspark 命令启动的本地模式),和通过 Jupyter 连接远程 Spark 集群(如 HDInsight、EMR、自建 YARN 集群),是两套完全不同的路径。前者只需环境变量和 PySpark 包,后者必须依赖 Livy + Spark magic。别混着试,否则 kernel 启动失败、%%spark 报错、连接超时全是必然结果。
本地 PySpark 内核:不连集群,纯单机调试
适合快速验证 RDD/DataFrame 逻辑、学习 API、跑小数据集。不需要 Livy,也不需要 Spark 集群。
- 确保已安装 Python(推荐 3.8+)和
pip;Spark 本身不用单独下载,PySpark 包自带轻量级 Spark 运行时 - 执行
pip install pyspark==3.5.0(版本尽量匹配你后续可能对接的集群,比如 HDInsight 4.0 用 Spark 3.5) - 安装 Jupyter:
pip install jupyter,然后运行jupyter notebook - 新建 notebook,选
Python 3kernel,直接写:from pyspark.sql import SparkSession<br>spark = SparkSession.builder.master("local[*]").getOrCreate()<br>spark.range(10).count()能返回10就通了 - 注意:
local[*]表示用本机所有 CPU 核;若想限制资源,改用local[2]或加.config("spark.driver.memory", "2g")
连接远程 Spark 集群:必须走 Livy + sparkmagic
这是真正“在 Jupyter 里用集群算力”的唯一可靠方式。HDInsight、Databricks(需开启 Livy)、EMR、或自建 Spark + Livy 服务都走这条路。
- 先确认远程集群已启用 Livy 服务(端口默认
8998),且网络可达(比如本地能curl http://<cluster-ip>:8998/version</cluster-ip>返回 JSON) - 安装指定版本的 sparkmagic:
pip install sparkmagic==0.20.7(新版对 Spark 3.5+/Livy 0.8+ 兼容更好;旧版0.13.1只支持到 Livy 0.7) - 运行
jupyter nbextension enable --py --sys-prefix widgetsnbextension,否则魔法命令的进度条、变量检查器会失效 - 配置
~/.sparkmagic/config.json,关键字段:{<br> "kernel_python_credentials": {<br> "username": "admin",<br> "password": "your_password",<br> "url": "https://your-cluster.azurehdinsight.net/livy"<br> }<br>}注意 URL 必须带/livy后缀,且用 HTTPS - 安装内核:
jupyter-kernelspec install sparkmagic/kernels/pysparkkernel(路径来自pip show sparkmagic输出)
%%spark 魔法命令常见失败点
即使 kernel 显示启动成功,%%spark 单元格一运行就卡住或报错,大概率是以下某处没对:
- Livy 日志里出现
ClassNotFoundException: org.apache.spark.sql.hive.HiveContext?说明集群没开 Hive 支持,或你的代码用了已废弃的HiveContext,换成SparkSession.builder.enableHiveSupport() - 报错
java.net.ConnectException: Connection refused?检查 config.json 里的 URL 是否拼错,或集群防火墙是否放行8998端口 - 单元格左上角显示
*一直转圈?可能是 Livy session 创建超时,加大配置:"livy_session_startup_timeout_seconds": 120
- 用
%%spark -o df想把结果导入 Python 变量却失败?确保该 session 已执行过spark.sql(...)并有返回值,且不要在同一个 cell 里混用%%spark和普通 Python 代码
最易被忽略的是 Livy 的身份认证方式——HDInsight 默认用 Basic Auth,但有些私有集群启用了 Kerberos,则 config.json 里得换用 auth 字段配 kerberos,且本地要有有效的 keytab 和 krb5.conf。没配对的话,Livy 日志里只会写 “Unauthorized”,根本不会告诉你缺了哪张票。











