[英]Re-using Java generic collections in Scala without trait Object
[英]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.