如何使用 pyspark and/or databricks utils 在 S3 目录中创建文件名列表

How to Create list of filenames in an S3 directory using pyspark and/or databricks utils

我需要将文件从一个 S3 存储桶目录移动到另外两个。我必须从 Databricks 笔记本上执行此操作。如果文件有 json 扩展名,我将移动到 json 目录。否则,我将移动到 otherDir。大概我会用 pyspark 和 databrick utils (dbutils) 来做到这一点。

我不知道 S3 存储桶的名称,只知道它的相对路径(称之为 MYPATH)。例如,我可以这样做:

dbutils.fs.ls(MYPATH)

它列出了 S3 目录中的所有文件。不幸的是,对于 dbutils,您可以一次移动一个文件或所有文件(无通配符)。我的大部分程序是:

for file in fileList:
  if file.endswith("json"):
    dbutils.fs.mv(file, jsonDir)
    continue
  if not file.endswith("json")
    dbutils.fs.mv(file, otherDir)
    continue

我的问题:我不知道如何从 MYPATH 中检索文件列表以将它们放入数组“fileList”中。我将不胜感激任何想法。谢谢

我认为如果您进行这些小的更改,您的代码就会运行:

fileList = dbutils.fs.ls(MYPATH)
for file in fileList:
  if file.name.endswith("/"): # Don't copy dirs
    continue
  if file.name.endswith("json"):
    dbutils.fs.mv(file.path, jsonDir + file.name)
    continue
  if not file.name.endswith("json"):
    dbutils.fs.mv(file.path, otherDir + file.name)
    continue

这里,追加file.name是为了在新目录中保留文件名。我需要这个 Azure dbfs 支持的存储,否则所有内容都会移动到同一个 blob。 jsonDirotherDir/ 字符结尾很重要。