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

如何在Databricks笔记本的Scala单元格中引用Python单元格的变量?

需求可行性说明

该需求完全可实现,Databricks同一笔记本内不同语言的单元格共享同一个Spark会话,你可以通过以下两种常用方式跨语言传递变量:


方法1:通过Spark共享配置传递(适合单值、简单类型场景)

这是传递数值、字符串等简单变量最简便的方式:

  1. 修改Python单元格,计算完成后将变量值写入Spark配置
batdf = spark.sql(f"""select cast((from_unixtime((timestamp/1000), 'yyyy-MM-dd HH:mm:ss')) as date) as event_date,(from_unixtime((timestamp/1000), 'yyyy-MM-dd HH:mm:ss')) as event_datetime, * from testable  """)
    
srcRecCount = batdf.count()
# 新增:将计算结果存入Spark全局配置,key可自定义,避免与Spark内置配置重名即可
spark.conf.set("custom.src_rec_count", str(srcRecCount))
  1. 修改Scala单元格,从Spark配置中读取值替换原有硬编码
%scala
import java.time._
// 读取Python传入的计数值并转成Long类型
val srcRecCount: Long = spark.conf.get("custom.src_rec_count").toLong
val endPart = LocalDateTime.now()
val endPartDelta =  endPart.toString.substring(0,19)
dbutils.notebook.exit(s"""{'date':'$endPartDelta', 'srcRecCount':'$srcRecCount'}""")

方法2:通过临时视图传递(适合多值、复杂类型场景)

如果需要传递多个变量或者复杂结构数据,用临时视图更通用稳定:

  1. 修改Python单元格,计算完成后创建临时视图存储结果
batdf = spark.sql(f"""select cast((from_unixtime((timestamp/1000), 'yyyy-MM-dd HH:mm:ss')) as date) as event_date,(from_unixtime((timestamp/1000), 'yyyy-MM-dd HH:mm:ss')) as event_datetime, * from testable  """)
    
srcRecCount = batdf.count()
# 新增:创建只有一行的临时视图存储结果
spark.createDataFrame([(srcRecCount,)], ["src_rec_count"]).createOrReplaceTempView("temp_src_stats")
  1. 修改Scala单元格,从临时视图中读取变量值
%scala
import java.time._
// 读取临时视图获取计数值
val srcRecCount: Long = spark.sql("select src_rec_count from temp_src_stats").head().getLong(0)
val endPart = LocalDateTime.now()
val endPartDelta =  endPart.toString.substring(0,19)
dbutils.notebook.exit(s"""{'date':'$endPartDelta', 'srcRecCount':'$srcRecCount'}""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:39:03