apache-spark - Spark:如何递归读取目录中具有不同扩展名的所有文件?
问题描述
我在 HDFS 中有一个这样的目录结构:
folder
├── sub1
│ ├── a
│ │ └── f1.txt
│ └── b
│ └── f2.parquet
└── sub2
├── a
│ └── f3.jpg
└── b
└── f4.unknown
有没有办法在使用 spark.txt 阅读时跳过一些文件(带有一些未知的扩展名)。我可以读取目录中存在的所有文件吗?
解决方案
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 方法。阅读本文档。
推荐阅读
- java - 如何在 JPA 中删除?
- r - R:向地图添加图例
- php - cURL POST 请求仅适用于硬编码的 url
- python - HTTPBasicAuthHandler 的问题(在 cURL 中工作)
- firebase - Firebase 项目的 API 密钥转移到 Google Cloud 上的另一个项目
- python - 如何从字符串中找到不重复的单词?
- javascript - 如何显示数组中的随机值?
- internationalization - 如何成功使用 Angular 内置的 i18n?
- python - JAX vmap 行为
- reactjs - React 最佳实践 CRUD