如何在Databricks中使用Spark读取S3存储桶下全部JSON格式文件
Databricks读取S3路径下全部JSON文件解决方案
单个文件可正常读取说明S3挂载权限、文件格式本身没有问题,通配符匹配失效是因为Spark对对象存储路径的通配符解析逻辑和本地文件系统存在差异,可通过以下几种方案解决:
- 方案1:使用
pathGlobFilter显式指定文件过滤规则
该参数是Spark原生支持的文件过滤配置,匹配稳定性高于路径内直接写通配符:
如果需要扫描子目录下的JSON文件,可额外添加df = spark.read.load( '/mnt/dataset/json/', format='json', pathGlobFilter='*.json' ) df.display()recursiveFileLookup=True参数。 - 方案2:枚举所有符合要求的文件路径后批量读取
直接通过Databricks工具类列出目录下所有JSON文件,再将路径列表传入读取接口,兼容性最高:# 筛选目录下所有后缀为json的文件路径 json_file_paths = [file.path for file in dbutils.fs.ls('/mnt/dataset/json/') if file.path.endswith('.json')] df = spark.read.load(json_file_paths, format='json') df.display() - 方案3:添加容错参数避免无效文件阻断读取
如果路径下存在损坏的JSON文件、S3同步生成的临时隐藏文件,可添加容错参数跳过异常文件:df = spark.read.load( '/mnt/dataset/json/', format='json', pathGlobFilter='*.json', ignoreCorruptFiles=True, ignoreMissingFiles=True ) df.display()
内容的提问来源于stack exchange,提问作者Lucas Leon
相关产品推荐
相关产品推荐

