【问题标题】:How to list and delete empty folders on Azure Data Lake Store Gen1如何列出和删除 Azure Data Lake Store Gen1 上的空文件夹
【发布时间】:2020-02-27 10:14:01
【问题描述】:

问题一:

有没有办法列出和删除 Azure Data Lake Store Gen 1 上的空文件夹?

场景:

我们需要定期运行作业,以递归方式删除数据湖存储中根文件夹下的所有空文件夹。

文件夹路径不能硬编码,因为可以有 100 个空文件夹。

问题2:

我们可以使用数据工厂或数据块来执行此操作吗?

谢谢。

【问题讨论】:

    标签: azure-data-factory azure-data-lake azure-databricks


    【解决方案1】:

    Rinks.I 使用GetMetadata Activity、If-Condition Activity、For each Activity 和 Delete Activity 实现了您的要求。请看我的详细步骤:

    Step1,我创建了 2 个空文件夹,其中 1 个文件夹在根路径中包含一个 csv 文件。

    Step2,在ADF管道中创建GetMetadata Activity,输出childItems

    Step3,通过ForEach Activity循环输出:@activity('Get Metadata1').output.childItems

    总结构如:

    Step4,在ForEach Activity内部,使用另一个GetMetaData Activity和If-condition Activity:

    将目录设置为@item().name

    设置条件表达式为@empty(activity('Get Metadata2').output.childItems)

    总结构如:

    Step5,将Delete Activity设置为For each Activity的Failed Activity。将@item.name()设置为Delete Activity Dataset目录。

    测试结果,test2test3文件夹被删除:

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

    【讨论】:

    • 感谢您的尝试。递归 ForEach(用于多级文件夹)在数据工厂中并不顺利。这已使用 Databricks 笔记本解决。详情social.msdn.microsoft.com/Forums/en-US/…
    • @Rinks 抱歉,也许我在这里提供了一个复杂的场景。请您在此处粘贴 MSFT 提供的解决方案,这可能对论坛上的其他人有所帮助。非常感谢您。
    • 当然 - 这就是答案在安装数据块并解决任何权限问题后,一个潜在的 (python3) 解决方案:def recur(item): good_to_delete_me = True contents = dbutils.fs.ls(item ) for i in contents: if not i.isDir(): good_to_delete_me = False else: can_delete_child = recur(i.path) good_to_delete_me = good_to_delete_me and can_delete_child if can_delete_child: test= i.path dbutils.fs.rm(test) return good_to_delete_me
    【解决方案2】:

    回复于https://social.msdn.microsoft.com/Forums/en-US/526006aa-f378-4766-9aba-532223a44814/how-to-list-and-delete-empty-folders-on-azure-data-lake-store-gen1?forum=AzureDataLake

    在安装数据块并解决任何权限问题后,一种可能的 (python3) 解决方案:

    定义重复(项目): good_to_delete_me = 真 内容 = dbutils.fs.ls(项目) 对于我的内容: 如果不是 i.isDir(): good_to_delete_me = 假 别的: can_delete_child = recur(i.path) good_to_delete_me = good_to_delete_me 和 can_delete_child 如果 can_delete_child: 测试= i.path dbutils.fs.rm(测试) 返回good_to_delete_me

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多