繁体   English   中英

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

[英]Databricks Spark notebook re-using Scala objects between runs?

我已经编写了一个Azure Databricks scala笔记本(基于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笔记本是否在两次运行之间保留上下文? 如果是这样,如何避免呢?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM