有没有办法动态扫描文件夹路径并列出所有文件?

Is there a way to scan through folder paths dynamically and list all files?

我正在测试这段代码。

dbutils.fs.ls("/mnt/rawdata/2019/01/01/corp/")

这对一个文件夹来说工作正常,但如果我尝试下面的行,它会失败。

dbutils.fs.ls("/mnt/rawdata/2019/01/*/corp/")

有没有办法递归列出父文件夹和所有子文件夹中的所有文件?我很想获得传递到数据框中的文件列表。

我尝试了下面的代码,它可以很好地将具有相似名称的文件加载到数据框中。

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/*/corp/*.gz")

但是,我不想将相似的文件合并在一起,我想列出这些文件所在的文件名和路径名。谢谢!

您可以使用 java API FileSystem.globStatus(Path pathPattern)

import org.apache.hadoop.fs.{FileSystem, Path}

val fs: FileSystem = FileSystem.get(spark.sparkContext.hadoopConfiguration)
val files = fs.globStatus(new Path("/mnt/rawdata/2019/01/*/corp/"))
files.foreach(println)

我终于让它工作了!!

import sys, os
import pandas as pd

mylist = []
root = "/dbfs/mnt/rawdata/"
path = os.path.join(root, "targetdirectory")
for path, subdirs, files in os.walk(root):
  for name in files:
    mylist.append(os.path.join(path, name))

len(mylist)
df = pd.DataFrame(mylist)