为了账号安全,请及时绑定邮箱和手机立即绑定

Databricks Spark 笔记本在运行之间重用 Scala 对象?

Databricks Spark 笔记本在运行之间重用 Scala 对象?

慕的地8271018 2021-06-11 14:02:55
我编写了一个 Azure Databricks scala notebook(基于 JAR 库),并且每小时使用一次 Databricks 作业运行它。在代码中,我使用 Application Insights Java SDK 进行日志跟踪,并初始化一个标记“RunId”的 GUID。我在 Scala 的“对象”构造函数中执行此操作:object AppInsightsTracer{  TelemetryConfiguration.getActive().setInstrumentationKey("...");  val tracer = new TelemetryClient();  val properties = new java.util.HashMap[String, String]()  properties.put("RunId", java.util.UUID.randomUUID.toString);  def trackEvent(name: String)  {    tracer.trackEvent(name, properties, null)  }}笔记本本身只是调用 JAR 中的代码:import com.mypackage._Flow.go()我希望每小时有一个不同的“RunId”。我看到的奇怪行为是,对于所有运行,我在日志中得到完全相同的“RunId”!好像 Scala 对象构造函数代码只运行一次,并在笔记本运行之间重复使用......Spark/Databricks 笔记本是否在运行之间保留上下文?如果是这样,如何避免这种情况?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

Jupyter notebook 产生一个 Spark 会话(将其视为一个进程)并使其保持活动状态,直到它死掉,或者您明确地重新启动它。该对象是一个单例,因此它被初始化一次,并且对于笔记本的所有单元执行都是相同的。


查看完整回答
反对 回复 2021-06-30
?
慕少森

TA贡献2019条经验 获得超9个赞

每次刷新笔记本时,都会从一个新的上下文开始。

我建议将您的 RunId 保存到磁盘文件中,然后在每次笔记本运行时读取该文件,然后增加文件中的 RunId。


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信