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

在Databricks部署Streamlit应用时SparkSession创建问题求助

在Databricks中为Streamlit应用共享SparkSession的解决方案

问题根源

Databricks Notebook本身已初始化全局SparkSession/SparkContext,你手动创建SparkContext(master="local")会与全局上下文冲突,导致报错。另外Streamlit进程独立于Notebook进程,无法直接传递Session对象,必须通过共享Spark配置复用上下文。

正确实现方案

1. 修正Streamlit脚本中的Spark初始化代码

删掉手动创建SparkContext的逻辑,直接复用Databricks的环境配置:

from pyspark.sql import SparkSession

# 复用Databricks全局Spark上下文配置创建会话
spark = SparkSession.builder.getOrCreate()

# 验证会话状态
print(f"Spark会话已激活: {spark is not None}")
print(f"会话应用名称: {spark.sparkContext.appName}")

2. 在Notebook中正确启动Streamlit

启动Streamlit时,确保进程继承Notebook的Spark环境变量,直接用以下命令即可:

!streamlit run myApp.py --server.port 8080

若需要自定义提交参数,可通过环境变量传递:

!export PYSPARK_SUBMIT_ARGS="--master local[*] pyspark-shell" && streamlit run myApp.py

3. 关键注意事项

  • 绝对不要调用sc.stop(),这会销毁Databricks的全局Spark上下文,导致所有后续Spark操作失败。
  • SparkSession.getActiveSession()返回null是因为Streamlit进程独立,Notebook的活跃会话不会自动传递,必须用getOrCreate()复用配置。
  • 如需自定义会话配置,基于现有Conf修改即可:
    spark = SparkSession.builder \
        .config("spark.sql.shuffle.partitions", "20") \
        .getOrCreate()
    

验证方式

在Streamlit脚本中添加简单的Spark操作,确认会话可用:

# 测试读取Databricks内部表
df = spark.sql("SELECT * FROM your_test_table LIMIT 10")
df.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:05:01