正在从Databrick文件系统读取文件



我使用以下代码从dbfs读取一个shapefile:

geopandas.read_file("file:/databricks/folderName/fileName.shp")

不幸的是,我没有权限这样做,我得到了以下错误

DriverError: dbfs:/databricks/folderName/fileName.shp: Permission denied

知道如何授予访问权限吗?文件存在于那里(我有权使用dbutils在那里保存文件,也可以使用spark从那里读取文件,但我不知道如何使用pyspark读取文件(。

添加这些行之后:

dbutils.fs.cp("/databricks/folderName/fileName.shp", "file:/tmp/fileName.shp", recurse = True)
geopandas.read_file("/tmp/fileName.shp")

根据下面的建议,我又犯了一个错误。

org.apache.spark.api.python.PythonSecurityException: Path 'file:/tmp/fileName.shp' uses an untrusted filesystem 'org.apache.hadoop.fs.LocalFileSystem', but your administrator has configured Spark to only allow trusted filesystems: (com.databricks.s3a.S3AFileSystem, shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem, shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem, com.databricks.adl.AdlFileSystem, shaded.databricks.V2_1_4.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem, shaded.databricks.org.apache.hadoop.fs.azure.NativeAzureFileSystem, shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystem)

GeoPandas对DBFS一无所知——它使用的是本地文件。所以你要么需要:

  • 使用DBFS Fuse从DBFS读取文件(但有一些限制(:
geopandas.read_file("/dbfs/databricks/folderName/fileName.shp")
  • 或使用dbutils.fs.cp命令将文件从DBFS复制到本地文件系统,并从中读取:
dbutils.fs.cp("/databricks/folderName/fileName.shp", "file:/tmp/fileName.shp", recurse = True)
geopandas.read_file("/tmp/fileName.shp")

附言:但是如果文件已经复制到驱动程序节点,那么您只需要从名称中删除file:

更新后更新问题:

在AAD直通集群上可以执行的操作存在限制,因此如果您想将文件从DBFS复制到本地文件系统,管理员需要按照故障排除文档中的描述更改集群配置。

但是/dbfs方法也应该适用于直通集群,尽管它至少应该是DBR7.3(docs(

好吧,答案比我想象的要容易:

geopandas.read_file("/dbfs/databricks/folderName")

(文件夹名称,因为它是一个包含所有形状文件的文件夹(

为什么会这样?容易的启用在管理控制面板("高级"选项卡(的DBFS上检查文件的可能性,单击您需要的文件,您将获得两个可能的文件路径。一个是专门用于Spark API的,另一个是用于File API的(这正是我所需要的(。

:(

最新更新