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

Databricks Notebook调用Guava BloomFilter.writeTo报NoSuchMethodError求助

Guava BloomFilter writeTo 方法 NoSuchMethodError 问题解决

核心原因

Databricks Runtime默认内置了旧版本的Guava,你手动添加的Guava依赖版本和集群内置版本不一致。编译阶段Notebook使用你指定的新版本(包含writeTo方法),但运行时JVM加载了集群内置的旧版本(无该方法),导致出现NoSuchMethodError。

解决步骤

  • 确认集群内置Guava版本
    在Notebook中执行代码查看当前集群的Guava版本:

    import com.google.common.util.concurrent.MoreExecutors
    println(MoreExecutors.getClass.getProtectionDomain.getCodeSource.getLocation)
    

    输出路径会包含Guava版本号,比如guava-14.0.1.jar。注意:writeTo方法是Guava 23.0及以后版本才新增的,如果集群内置版本低于23.0,必须强制加载新版本。

  • 强制加载指定Guava版本

    1. 把你需要的高版本Guava jar上传到DBFS(通过Workspace的Data > DBFS页面上传)。
    2. 进入集群配置页面,在高级选项 > Spark > Spark配置中添加:
      spark.driver.extraClassPath /dbfs/path/to/your/guava-[version].jar
      spark.executor.extraClassPath /dbfs/path/to/your/guava-[version].jar
      
      替换路径为你上传的jar的实际DBFS路径。
    3. 重启集群。
  • 验证加载结果
    重启后执行以下代码,确认加载的是你指定的新版本Guava:

    import com.google.common.hash.BloomFilter
    println(BloomFilter.getClass.getProtectionDomain.getCodeSource.getLocation)
    

    输出路径应指向你上传的jar文件。

  • 重新测试writeTo方法
    重新运行BloomFilter的创建和writeTo调用代码,此时应该可以正常执行。

另外,也可以用%sh命令查看集群类路径中的Guava位置:

echo $CLASSPATH | grep guava

确认旧版本Guava是否被优先级更高的路径加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:31:05