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

如何通过Maven成功运行依赖Databricks Connect的ScalaTest测试?

问题解决:Maven运行Databricks Connect测试时DBFS文件系统不支持错误

问题场景

我们有一个基于ScalaTest的Maven测试项目,测试用例通过Databricks Connect实现DBFS的读写操作。在IntelliJ中右键运行测试用例可成功执行,但执行mvn test命令时,抛出如下错误:

org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "dbfs"
  at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3390)
  at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3411)
  at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:158)
  at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3474)
  at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3442)
  at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:524)
  at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)
  at org.apache.spark.sql.execution.streaming.FileStreamSink$.hasMetadata(FileStreamSink.scala:46)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:366)
  at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:297)
  ...

解决方案

1. 确认Databricks Connect依赖配置

IntelliJ可能自动加载了Databricks的FileSystem实现,但Maven测试阶段可能因依赖范围问题无法获取。在pom.xml中添加或确认以下依赖,版本需与你的Databricks集群版本匹配:

<dependency>
    <groupId>com.databricks</groupId>
    <artifactId>databricks-connect_2.12</artifactId>
    <version>对应集群版本号</version>
    <scope>test</scope>
</dependency>

2. 添加Hadoop核心配置文件

在测试资源目录src/test/resources下创建core-site.xml,指定DBFS对应的FileSystem实现类:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>fs.dbfs.impl</name>
        <value>com.databricks.client.remote.RemoteDbfsFileSystem</value>
    </property>
    <property>
        <name>fs.dbfs.impl.disable.cache</name>
        <value>true</value>
    </property>
</configuration>

该配置会让Hadoop识别dbfs://协议并使用Databricks提供的实现。

3. 配置Maven测试阶段的Databricks参数

在pom.xml的maven-surefire-plugin中添加JVM参数,传递Databricks工作区地址和访问令牌:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <argLine>
                    -Dspark.databricks.service.address=你的Databricks工作区地址
                    -Dspark.databricks.service.token=你的访问令牌
                </argLine>
            </configuration>
        </plugin>
    </plugins>
</build>

也可以在测试类中通过代码初始化SparkSession时配置这些参数:

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .config("spark.databricks.service.address", "你的工作区地址")
  .config("spark.databricks.service.token", "你的访问令牌")
  .getOrCreate()

4. 排查依赖冲突

执行mvn dependency:tree查看依赖树,检查是否存在Hadoop相关依赖版本冲突。如果有,排除冲突的Hadoop依赖,确保Databricks提供的相关jar包优先加载。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:11:00