首页 > 解决方案 > Spark:如何递归读取目录中具有不同扩展名的所有文件?

问题描述

我在 HDFS 中有一个这样的目录结构:

folder
├── sub1
│   ├── a
│   │   └── f1.txt
│   └── b
│       └── f2.parquet
└── sub2
    ├── a
    │   └── f3.jpg
    └── b
        └── f4.unknown

有没有办法在使用 spark.txt 阅读时跳过一些文件(带有一些未知的扩展名)。我可以读取目录中存在的所有文件吗?

标签: apache-sparkpysparkapache-spark-sql

解决方案


Spark 提供了不同的读取 API 来处理不同的文件格式。

例子:

如果要读取 txt/csv 文件,可以使用 spark.read.text 或 spark.read.csv 方法。对于 json 格式,您可以使用 spark.read.json,对于 parquet spark.read.parquet 等等。您需要使用有关文件格式的方法来获取正确的数据框。

星火版本 < 3.0.0

假设您在问题中指定的文件夹结构下有不同格式的文件。您需要使用下面的代码来只读 csv 文件。

spark.read.csv("folder/sub1/a/*.csv", "folder/sub2/a/*.csv","folder/sub1/b/*.csv", "folder/sub2/b/*.csv")

火花版本> = 3.0.0

在此版本中,您可以使用 pathGlobFilter、recursiveFileLookup 等选项,而不是指定每个子文件夹路径,并仅将父文件夹路径传递给 read 方法。阅读本文档


推荐阅读