Databricks社区版找不到/dbfs/databricks-datasets,pandas读文件报错如何解决
问题原因
该问题的核心原因是 Databricks社区版未提供DBFS FUSE挂载支持:
- Databricks付费版默认会将DBFS(Databricks文件系统)挂载到集群节点的
/dbfs本地路径下,所以可以直接用pandas.read_csv、open等本地文件操作接口访问该路径下的内容 - Databricks社区版移除了该FUSE挂载能力,
/dbfs路径在集群本地不存在,所以所有直接访问/dbfs前缀路径的本地文件操作都会抛出文件不存在错误 %fs是Databricks内置的魔术命令,底层直接调用DBFS的原生接口访问文件,因此不受FUSE挂载限制,可以正常返回结果
可行解决方案
下面三个方案都可以解决该问题,可根据使用场景选择:
方案1:Spark读取后转Pandas DataFrame(最适合读取结构化数据集)
直接调用Spark的文件读取接口读取DBFS文件,再转为Pandas格式,无需操作本地文件:
import pandas as pd # 读取csv文件,header=True表示第一行是表头,inferSchema=True表示自动推导字段类型 spark_df = spark.read.csv("databricks-datasets/COVID/covid-19-data/us-states.csv", header=True, inferSchema=True) # 转换为Pandas DataFrame pd_df = spark_df.toPandas()
方案2:使用dbutils读取文本类文件(适合读取小体积非结构化文本)
直接用Databricks内置的dbutils.fs工具读取DBFS中的文本内容,无需转存:
# 读取README.md完整内容 readme_content = dbutils.fs.head("/databricks-datasets/README.md") print(readme_content)
方案3:转存到集群本地目录后读取(适配所有本地文件操作接口)
先将DBFS中的文件复制到集群的本地临时目录,再用原生Python接口读取,完全兼容pandas、open等操作:
import pandas as pd # 复制csv文件到集群本地临时目录 dbutils.fs.cp("databricks-datasets/COVID/covid-19-data/us-states.csv", "file:/tmp/us-states.csv") # 读取本地csv文件 df = pd.read_csv("/tmp/us-states.csv") # 读取README.md同理 dbutils.fs.cp("/databricks-datasets/README.md", "file:/tmp/README.md") f = open("/tmp/README.md", "r") print(f.read())
内容的提问来源于stack exchange,提问作者Ying Xiong
相关产品推荐
相关产品推荐

