如何在Databricks中导出%sh单元格变量供其他单元格使用
每个%sh单元格会独立启动一个shell子进程,单元格运行结束后进程销毁,你在单个单元格内export的环境变量仅在当前进程生效,跨单元格的新shell进程无法继承该变量。以下是两种符合需求的实现方案,均只会在笔记本启动时生成一次固定日期,哪怕运行时长超过1天也不会自动更新:
方案1:使用Databricks Widget全局传递(最推荐,全语言单元格通用)
- 在笔记本最开头运行一次Python单元格,生成启动时的固定日期并注册为全局组件:
import datetime # 仅运行一次生成启动日期,后续不再变更 start_date = datetime.datetime.now().strftime("%Y-%m-%d") dbutils.widgets.text("global_start_date", start_date)
- 任意
%sh单元格可以直接读取注入的环境变量:
%sh # 组件名称自动添加widget_前缀作为环境变量名 echo $widget_global_start_date
Python、Spark、SQL单元格也可以直接调用该变量,全场景通用。
方案2:本地临时文件存储(仅适用于%sh场景)
- 开头运行一次%sh单元格生成日期并存入驱动节点临时文件:
%sh date '+%Y-%m-%d' > /tmp/databricks_notebook_start_date
- 后续所有%sh单元格读取该文件即可拿到固定日期:
%sh current_date=$(cat /tmp/databricks_notebook_start_date) echo $current_date
内容的提问来源于stack exchange,提问作者gnobre
相关产品推荐
相关产品推荐

