什么是使用Spark删除Azure Blob中文件的更快方法?

时间:2019-06-01 17:04:53

标签: azure apache-spark pyspark azure-storage-blobs azure-databricks

我正在Azure上使用Databricks / Spark。我想删除存储在Blob中的超过100,000个文本文件。 Blob已安装。我使用Python(PySpark)以并行方式删除这些文件的代码如下。

import os

# use dbutils to list all files
# very slow operation
text_files = ['/dbfs/mnt/myblob/myfolder/{}'.format(fi.name) for fi in dbutils.fs.ls('/dbfs/mnt/myblob/myfolder')]

# use spark context to parallelize list of text files
rdd = sc.parallelize(text_files)

# now delete files
# seems to be very slow as well when spark job kicks off
rdd.map(lambda p: os.remove(p)).count()

请注意,我正在使用dbutils列出挂载目录中的文件。此操作很慢。另外请注意,我正在使用Python的os.remove(...)删除文件,并且此操作似乎也很慢。

关于在Spark / Databricks上下文中删除Azure blob中文件的更快方法的任何技巧吗?

也有相关的帖子herehere。但是,前者未指定上下文/环境(引用的链接用于Scala,而这些方法在PySpark的Spark上下文中不存在),而后者则想实现并行删除,但未说明解决方案是否需要火花。

2 个答案:

答案 0 :(得分:0)

当前,您正在从分布式文件系统中读取数据,然后将它们导入python驱动程序,在Spark上导出它们,然后使用Python再次读取它们以执行删除...

我认为您可以删除spark步骤,在python中操作列表,然后直接使用dbutils删除文件。

答案 1 :(得分:0)

我意识到并没有直接回答您的问题,而是看到您正在使用Azure并可能正在使用Data Factory(或者在将来编排/生产数据砖工作时可能会出现)...

您可能希望考虑数据工厂删除活动,这是对数据工厂v2的相当新的添加:https://docs.microsoft.com/en-us/azure/data-factory/delete-activity

它具有并行删除的能力。