如何快速将10万+字典列表生成符合BigQuery要求的换行分隔JSON文件
高效生成BigQuery兼容的换行分隔JSON文件方案
性能瓶颈原因
你原有实现速度慢的核心原因是循环内重复打开/关闭文件:每次open调用都涉及操作系统层面的文件句柄申请、权限校验、资源释放操作,十万次重复操作会把IO开销放大数百倍。
优化方案
方案1:单文件句柄循环写入(通用低内存场景)
将文件打开操作移到循环外部,全程只占用1个文件句柄,完全消除重复打开文件的开销,适合边生成字典边写入、内存有限的场景:
import json # 写入模式直接新建/覆盖文件,不需要用追加模式 with open('cache/name.json', 'w', encoding='utf-8') as f: while condition: # 此处保留你原有生成store字典的逻辑 json_str = json.dumps(store, ensure_ascii=False) f.write(f"{json_str}\n")
方案2:批量拼接后一次性写入(十万级数据最优性能)
如果内存足够,先把所有序列化后的JSON字符串存到列表中,最后一次性拼接写入磁盘,仅执行1次IO操作,性能比方案1高30%左右,十万条数据完全不会有内存压力:
import json output_buf = [] while condition: # 此处保留你原有生成store字典的逻辑 output_buf.append(json.dumps(store, ensure_ascii=False)) with open('cache/name.json', 'w', encoding='utf-8') as f: f.write('\n'.join(output_buf))
补充说明
你需要的这种每行一个JSON对象的格式是标准的NDJSON(换行分隔JSON)/JSON Lines格式,也是BigQuery导入JSON数据的官方要求格式,上述两种方案生成的文件都可以直接用于BigQuery导入。
如果字典中包含中文、特殊emoji等非ASCII字符,ensure_ascii=False参数可以避免字符被转义为Unicode编码,保证BigQuery可以正常解析内容。
内容的提问来源于stack exchange,提问作者Tenserflu
相关产品推荐
相关产品推荐

