Databricks社区版PySpark读取SQLite数据库遇路径不存在错误
解决Spark JDBC读取Databricks上SQLite数据库的路径问题
问题原因
SQLite JDBC驱动基于Java,只能识别本地文件系统路径,无法直接读取Databricks的DBFS(dbfs:/)路径;而直接写/FileStore/...会指向Databricks节点的本地文件系统,该路径默认不存在,所以才会报出'/FileStore' does not exist的错误。
解决方案步骤
1. 先确认文件是否存在于DBFS目标路径
先在Databricks notebook中执行以下命令,检查目标文件是否真的在指定路径下:
dbutils.fs.ls("/FileStore/tables/")
如果输出结果里没有chinook-1.db,说明文件没上传到正确位置,需要重新上传文件到该DBFS路径。
2. 使用DBFS的本地挂载路径
Databricks会自动将DBFS挂载到集群节点本地的/dbfs目录下,这是Java层可以识别的本地路径,所以修改JDBC URL为:
df = spark.read.format('jdbc') \ .options( driver='org.sqlite.JDBC', dbtable='employees', url='jdbc:sqlite:/dbfs/FileStore/tables/chinook-1.db' ).load()
注意:路径必须是/dbfs/FileStore/...,不能写成dbfs:/FileStore/...(JDBC驱动不识别DBFS协议)或/FileStore/...(本地无此路径)。
3. 备选方案:拷贝文件到本地临时目录
如果上述方法仍无法解决,可以将DBFS中的SQLite文件拷贝到节点本地临时目录后再读取:
# 从DBFS拷贝文件到本地临时目录 dbutils.fs.cp("dbfs:/FileStore/tables/chinook-1.db", "file:/tmp/chinook-1.db") # 读取本地临时文件 df = spark.read.format('jdbc') \ .options( driver='org.sqlite.JDBC', dbtable='employees', url='jdbc:sqlite:/tmp/chinook-1.db' ).load()
4. 确认SQLite JDBC驱动已正确加载
如果驱动未安装,也可能导致路径相关的异常。可以通过以下方式安装驱动:
- 进入集群的「库」页面,添加Maven库,坐标填写
org.xerial:sqlite-jdbc:3.41.2.1(可替换为最新版本) - 或者在notebook中执行Scala命令安装:
libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.41.2.1"
内容的提问来源于stack exchange,提问作者AzSurya Teja
相关产品推荐
相关产品推荐

