我使用以下代码从 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 读取文件(但有一些 limitations ):
geopandas.read_file("/dbfs/databricks/folderName/fileName.shp")
- 或使用 dbutils.fs.cp command将文件从 DBFS 复制到本地文件系统,并从中读取:
dbutils.fs.cp("/databricks/folderName/fileName.shp", "file:/tmp/fileName.shp", recurse = True)
geopandas.read_file("/tmp/fileName.shp")
附注但如果文件已经复制到驱动节点,那么您只需从名称中删除 file:
即可。
更新问题后更新:
在 AAD 直通集群上可以执行的操作存在限制,因此您的管理员需要按照 documentation on troubleshooting 中的说明更改集群配置。如果您想将文件从 DBFS 复制到本地文件系统。
但是 /dbfs
方式也应该适用于直通集群,尽管它至少应该是 DBR 7.3 ( docs )
关于python - 从 Databrick 文件系统读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67601331/