我使用以下代码从 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)
答案 0 :(得分:1)
GeoPandas 对 DBFS 一无所知 - 它正在处理本地文件。所以你要么需要:
geopandas.read_file("/dbfs/databricks/folderName/fileName.shp")
dbutils.fs.cp("/databricks/folderName/fileName.shp", "file:/tmp/fileName.shp", recurse = True)
geopandas.read_file("/tmp/fileName.shp")
附言但如果文件已经复制到驱动程序节点,那么您只需要从名称中删除 file:
。
更新问题后更新:
可以在 AAD 直通集群上执行的操作存在限制,因此如果您要将文件从 DBFS 复制到本地文件系统,您的管理员需要按照 documentation on troubleshooting 中的说明更改集群配置。>
但是 /dbfs
方式也应该适用于直通集群,尽管它至少应该是 DBR 7.3 (docs)
答案 1 :(得分:0)
好吧,答案比我想象的要容易:
geopandas.read_file("/dbfs/databricks/folderName")
(文件夹名称,因为它是一个包含所有形状文件的文件夹)
为什么要这样?简单。在管理控制面板(“高级”选项卡)中启用检查 DBFS 文件的可能性,单击您需要的文件,您将获得文件的两个可能路径。一个专用于 Spark API,另一个专用于 File API(这正是我需要的)。
:)