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

Python模糊匹配脚本遇zsh: killed错误的解决办法

解决Python模糊匹配进程被终止的问题

错误原因

zsh: killed 本质是系统因内存不足强制终止了Python进程。你的代码中使用indexer.full()会生成两个数据集的全笛卡尔积候选对——若al_usa和al_sample的行数分别为M和N,候选对数量就是M*N,数据量稍大就会直接耗尽内存。

修复方案

1. 替换全索引为高效索引策略

放弃full(),改用内存友好的索引方式:

  • 块索引(Block Index):按共同字段分组,仅在同组内生成候选对,比如按state字段:
indexer = recordlinkage.Index()
indexer.block('state')  # 仅匹配同州的记录
  • 排序邻域索引:对指定字段排序后,仅匹配相邻范围内的记录,适合文本类字段(如公司名):
indexer = recordlinkage.Index()
indexer.sortedneighbourhood('companyname', window=5)  # 窗口大小可按需调整

2. 预处理数据缩小规模

  • 加载数据时仅保留必需字段:
# 只加载匹配需要的列
al_usa = pd.read_csv('al_all_reference_usa.dta.csv', index_col='id', usecols=['id', 'companyname', 'state'])
al_sample = pd.read_csv('al_final.dta.csv', index_col='company_number', low_memory=False, usecols=['company_number', 'name', 'state'])
  • 去除重复记录:
al_usa = al_usa.drop_duplicates(subset=['companyname', 'state'])
al_sample = al_sample.drop_duplicates(subset=['name', 'state'])

3. 临时提升系统可用内存

如果是Mac系统,可关闭其他高内存占用应用,或通过终端调整内存限制(效果有限):

ulimit -S -s unlimited

4. 分批次处理超大数据集

若数据量极大,可将数据集拆分后分批处理,最后合并结果:

# 示例:按state字段拆分,逐个处理子数据集
for state in al_sample['state'].unique():
    sample_subset = al_sample[al_sample['state'] == state]
    usa_subset = al_usa[al_usa['state'] == state]
    
    indexer = recordlinkage.Index()
    indexer.block('state')
    candidates = indexer.index(usa_subset, sample_subset)
    
    features = compare.compute(candidates, usa_subset, sample_subset)
    # 保存当前批次结果
    features.to_csv(f'match_features_{state}.csv')

验证修改

替换索引策略后,先打印候选对数量:

print(len(candidates))

若候选对数量远小于全笛卡尔积规模,说明内存压力已缓解,后续匹配计算可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:15