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

通过Databricks VS Code扩展启动Notebook任务时库依赖未更新

问题分析与解决方案

核心问题

Jar更新不生效的原因主要有两点:

  1. 现有集群的Jar缓存机制:Databricks现有集群会缓存已安装的库文件,除非主动重新加载或重启,否则不会自动替换旧Jar。
  2. Bundle任务的库引用方式错误:当前配置中任务直接引用本地Jar路径,未关联Bundle部署的Artifact,导致集群无法获取更新后的Jar文件。

具体修复步骤

1. 修正databricks.yml的库引用方式

将任务中的本地Jar路径替换为Bundle Artifact的引用,这样Bundle会自动关联部署到Workspace的最新Jar:

resources:
  jobs:
    my_job_runner:
      name: "[My Job] Runner Notebook"
      tasks:
        - task_key: my_job_runner_notebook
          existing_cluster_id: my-cluster-id
          notebook_task:
            notebook_path: notebooks/MyJob_Runner.scala
          libraries:
            # 替换原本地Jar路径为Artifact引用
            - artifact: my_lib

2. 处理集群Jar缓存问题

由于使用existing_cluster_id,集群不会自动刷新Jar,可选以下两种方案:

  • 方案A(推荐开发环境):改用临时集群(new_cluster)替代现有集群,每次任务运行都会启动新集群,自动加载最新Jar:
tasks:
  - task_key: my_job_runner_notebook
    new_cluster:
      spark_version: "13.3.x-scala2.12"
      node_type_id: "your-node-type"
      num_workers: 1
    notebook_task:
      notebook_path: notebooks/MyJob_Runner.scala
    libraries:
      - artifact: my_lib
  • 方案B:如果必须用现有集群,每次更新Jar后需手动操作:
    • 登录Databricks工作台,找到目标集群
    • 进入Libraries标签,卸载旧的Jar文件
    • 重新部署Bundle并运行任务

3. 确保sbt assembly正确生成更新后的Jar

  • 确认本地执行sbt assembly后,target/scala-2.12/下的Jar文件是最新的(可通过文件修改时间验证)
  • 若Jar文件名固定(如my-lib-assembly-0.1.0.jar),集群可能因文件名相同缓存旧文件,建议在build.sbt中配置快照版本或动态文件名,例如:
version := "0.1.0-SNAPSHOT"
assemblyJarName in assembly := s"my-lib-assembly-${version.value}.jar"

4. 验证部署流程

每次修改代码后:

  1. 本地执行sbt assembly确认Jar更新
  2. 通过VS Code扩展重新部署Bundle
  3. 运行任务前,确保集群未缓存旧Jar(或已重启/卸载旧Jar)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:15:58