Azure Databricks:Python 并行 for 循环

Azure Databricks: Python parallel for loop

我正在使用 Azure Databricks 来分析一些数据。我在 blob 存储中有以下文件夹结构:

folder_1\n1 csv files
folder_2\n2 csv files
..
folder_k\nk csv files

我想读取这些文件,运行 一些算法(相对简单)并在另一个 blob 存储位置以相似的文件夹结构为每个 csv 文件写出一些日志文件和图像文件。现在我有一个简单的循环结构来执行此操作:

for folder in folders:
  #set up some stuff
  for file in files:
    #do the work and write out results

数据库包含 150k 个文件。有没有办法并行化它?

我发现在数据块中并行处理此类令人尴尬的并行任务的最佳方法是使用 pandas UDF (https://databricks.com/blog/2020/05/20/new-pandas-udfs-and-python-type-hints-in-the-upcoming-release-of-apache-spark-3-0.html?_ga=2.143957493.1972283838.1643225636-354359200.1607978015)

我创建了一个带有要循环的文件和文件夹列表的 spark 数据框,将其传递给一个 pandas 具有指定分区数(本质上是要并行化的内核)的 UDF。这可以利用数据块集群上的可用核心。对于可以从 pandas UDF 调用的内容有一些限制(例如,不能直接使用 'dbutils' 调用),但它对我的应用程序来说就像一个魅力。