You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark Jupyter内核中获取当前脚本所在目录?

在PySpark内核的Jupyter Notebook中获取当前脚本目录的解决方法

方法1:提取JPY_SESSION_NAME并解析目录

你提到的JPY_SESSION_NAME变量确实可以用来定位notebook路径,但直接用%env魔法命令无法直接赋值给Python变量,需要通过IPython的API来获取:

from IPython import get_ipython
import os

# 获取JPY_SESSION_NAME的值
jpy_session = get_ipython().run_line_magic('env', 'JPY_SESSION_NAME')
# 提取notebook所在目录
current_dir = os.path.dirname(jpy_session)

JPY_SESSION_NAME返回的是notebook的相对路径(比如notebooks/my_script.ipynb),用os.path.dirname就能得到它的父目录。

方法2:通过Jupyter API获取完整路径

如果需要更准确的完整本地路径,可以结合jupyter notebook list命令来获取所有运行中的notebook信息,再匹配当前会话:

import os
import subprocess
import json
from IPython import get_ipython

# 获取当前会话的notebook名称
jpy_session = get_ipython().run_line_magic('env', 'JPY_SESSION_NAME')
notebook_filename = os.path.basename(jpy_session)

# 调用Jupyter命令获取所有运行的notebook数据
notebooks_data = subprocess.check_output(
    ['jupyter', 'notebook', 'list', '--json']
).decode('utf-8')
notebooks = json.loads(notebooks_data)['notebooks']

# 匹配当前notebook并提取目录
current_notebook = next(nb for nb in notebooks if nb['name'] == notebook_filename)
current_full_dir = os.path.dirname(current_notebook['path'])

这个方法能拿到notebook的完整本地路径,适合需要绝对路径的场景。

注意事项

  • 上述方法仅适用于本地模式或客户端模式的PySpark内核,如果是集群模式(比如YARN集群),driver所在的本地目录和executor的工作目录并不一致,此时获取的目录仅代表driver端的notebook位置。
  • 如果你的notebook是通过JupyterLab打开的,JPY_SESSION_NAME的格式可能略有不同,但解析逻辑一致。

内容的提问来源于stack exchange,提问作者Pablo CA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:22:10