【问题标题】:How to Create list of filenames in an S3 directory using pyspark and/or databricks utils如何使用 pyspark 和/或 databricks utils 在 S3 目录中创建文件名列表
【发布时间】:2021-11-28 11:49:24
【问题描述】:

我需要将文件从一个 S3 存储桶目录移动到另外两个目录。我必须从 Databricks 笔记本上执行此操作。如果文件有 json 扩展名,我将进入 jsonDir。否则,我将进入 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”中。我会很感激任何想法。谢谢。

【问题讨论】:

    标签: python amazon-s3 pyspark databricks


    【解决方案1】:

    我认为如果你做这些小改动,你的代码就会运行:

    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 必须以 / 字符结尾。

    【讨论】:

    • 您是否更改了原始答案?那个对我有用!好吧,除了它包含列表中的目录。我在上面的其他代码中也有错误,我已经修复了(并编辑了帖子以反映)。要么你改变了你的答案,要么其他人删除了他们的答案。非常困惑如何进行。同样,除了包含目录之外,先前的答案也有效。另外,我更新了上面的代码。
    • 是的,我确实改变了答案,因为我很确定您需要+ file.name。您可以通过按我的答案中的edited xx hours ago 链接访问所有编辑。我会保留当前的答案,因为它提供了一个完整的解决方案,但是如果它的某些部分不适合你,请发表评论。
    • 这是 fskj 为我工作的解决方案。这是针对当前帖子状态的解决方案(10 月 8 日 15:22 编辑)fileList = [file.path for file in dbutils.fs.ls(MYPATH)]
    • 奇怪,我绝对需要+ file.name。但我在 Azure 上进行测试,所以 S3 上的语义可能会有所不同。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2021-11-21
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多