You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SEC Edgar Logfile数据库快速下载与大容量结果存储方案咨询

下载与解压优化方案

  • 下载环节改用流式请求,避免将整个压缩包加载到内存,批量任务可搭配异步请求框架提升下载速度
  • 读取文件时启用分块加载,仅读取需要的字段并指定更紧凑的数据类型,降低内存占用
  • 可替换pandas为polars库,其默认内存管理和运行效率优于pandas,还支持懒加载无需全量读入数据

优化后代码示例:

import pandas as pd
import requests
import zipfile
import tempfile

def get_df_chunked(url, chunk_size=100000, usecols=None, dtype=None):
    # 流式下载到临时文件,不占用内存存储整个压缩包
    with requests.get(url, stream=True) as r:
        r.raise_for_status()
        with tempfile.NamedTemporaryFile(suffix='.zip') as tmp:
            for chunk in r.iter_content(chunk_size=8192):
                tmp.write(chunk)
            tmp.flush()
            # 读取压缩包内csv,分块返回处理
            with zipfile.ZipFile(tmp.name) as zip_file:
                csv_name = zip_file.namelist()[0]
                with zip_file.open(csv_name) as f:
                    for chunk in pd.read_csv(f, chunksize=chunk_size, usecols=usecols, dtype=dtype):
                        yield chunk

调用时可按需指定需要的列和数据类型,进一步压缩内存占用:

# 示例:仅读取ip、cik、accession三个必要字段,指定数据类型减少冗余内存占用
for chunk in get_df_chunked(
    url='http://www.sec.gov/dera/data/Public-EDGAR-log-file-data/2017/Qtr2/log20170630.zip',
    usecols=['ip', 'cik', 'accession'],
    dtype={'ip': 'string', 'cik': 'Int32'}
):
    # 逐块执行IP匹配、分组计算等操作
    process_chunk(chunk)

处理结果存储方案

  • 不建议存储为CSV格式,优先选择Parquet列式存储格式,相比CSV可节省70%以上存储空间,读写速度提升数倍,且支持按字段查询,pandas、polars、DuckDB等工具均可直接读写
  • 全量数据查询分析可搭配DuckDB嵌入式数据库,无需导入数据即可直接对Parquet文件执行SQL查询,分组、关联匹配等操作效率远高于pandas内存计算,且支持超出内存规模的数据运算
  • 若需要多用户访问或高频查询,可将结果导入PostgreSQL数据库,给常用查询字段(如IP段、企业ID)增加索引,大幅提升查询效率

内容的提问来源于stack exchange,提问作者Jim Knopf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:24:01