如何使用 Databricks dbutils 删除文件夹中的所有文件

问题描述 投票:0回答:7

有人可以让我知道如何使用 databricks dbutils 删除文件夹中的所有文件。 我已尝试以下方法,但不幸的是,Databricks 不支持通配符。

dbutils.fs.rm('adl://azurelake.azuredatalakestore.net/landing/stageone/*')

谢谢

databricks azure-databricks dbutils
7个回答
45
投票

根据文档,rm函数接收2个参数:

rm(dir: String, recurse: boolean = false): boolean -> 删除文件或目录

其中第二个参数是一个布尔标志,用于设置递归性,因此您只需将其设置为 true 即可:

dbutils.fs.rm('adl://azurelake.azuredatalakestore.net/landing/stageone/',True)

5
投票

这样的东西应该有效:

val PATH = "adl://azurelake.azuredatalakestore.net/landing/stageone/"
dbutils.fs.ls(PATH)
            .map(_.name)
            .foreach((file: String) => dbutils.fs.rm(PATH + file, true))

3
投票

总结以上所有答案:

  1. 要删除整个文件夹,请使用:

    PATH = "adl://azurelake.azuredatalakestore.net/landing/stageone/"
    
     dbutils.fs.rm(PATH,True)
    
  2. 
    

2)要删除除该文件夹本身之外的所有文件和子文件夹,请使用:

   PATH = "adl://azurelake.azuredatalakestore.net/landing/stageone/"
   for i in dbutils.fs.ls(PATH):
        dbutils.fs.rm(i[0],True)

我自己测试过,有效!

如果您有任何疑问,请告诉我。

--时政


1
投票

增强ezraorich的答案,如果你想删除目录中的文件夹和文件,那么使用

PATH = "dbfs/azure/directory/sub_dirctory"

for i in dbutils.fs.ls(PATH):
    dbutils.fs.rm(i[0],True)

1
投票

对于 python 用户,你可以这样做:

folder_path = 'adl://azurelake.azuredatalakestore.net/landing/stageone/'
path_list = [fileinfo.path for fileinfo in dbutils.fs.ls(folder_path)]
for path in path_list:
    dbutils.fs.rm(path)

0
投票

这对我有用:

PATH = "adl://azurelake.azuredatalakestore.net/landing/stageone/"

for i in dbutils.fs.ls(PATH):
    dbutils.fs.rm(i[0])

0
投票

我对这篇文章很感兴趣,但很好奇如果需要“保留”目录,使用两个 API 调用是否会更快/更好。

(scala 伪代码)

dbutils.fs.rm("adl://azurelake.azuredatalakestore.net/landing/stageone/", true)
dbutils.fs.mkdirs("adl://azurelake.azuredatalakestore.net/landing/stageone/")
© www.soinside.com 2019 - 2024. All rights reserved.