在Databricks中使用通配符读取JSON文件失败求助
在Databricks用
with open批量读JSON文件的解决方案 open()函数本身不支持通配符(比如**/*.json),它只能识别单个具体文件路径,所以直接写通配符路径会报错——系统根本找不到叫/dbfs/mnt/bronze/categories/**/*.json的单个文件。而Spark的read.json()是框架内部做了通配符解析和批量读取的封装,所以能正常工作。
要想用with open实现批量读取,用Python的glob模块就能解决,具体步骤如下:
用glob匹配文件后逐个读取
glob可以解析通配符路径,返回所有符合条件的文件列表,之后遍历列表逐个用with open读取即可:
import glob import json # 匹配所有层级子文件夹下的JSON文件,recursive=True必须加,否则**不生效 file_paths = glob.glob('/dbfs/mnt/bronze/categories/**/*.json', recursive=True) # 收集所有文件的JSON数据 all_json_data = [] for file_path in file_paths: with open(file_path, 'r') as f: # 读取单个JSON文件内容,根据文件格式调整: # 如果是单个JSON对象/数组,用json.load() data = json.load(f) all_json_data.append(data) # 如果是每行一个JSON对象(JSON Lines格式),改用逐行读取: # for line in f: # line_data = json.loads(line.strip()) # all_json_data.append(line_data) # 现在all_json_data里就是所有文件的内容了
注意事项
- 必须加上
recursive=True,否则**无法匹配深层子文件夹 - 如果JSON文件很大,建议不要一次性把所有数据存入列表,而是边读边处理,避免内存溢出
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

