pandas read_json 成块但仍然有内存错误

San*_*ndy 6 large-files pandas

我正在尝试读取和处理一个大的 json 文件(~16G),但即使我通过指定 chunksize=500 读取小块,它仍然有内存错误。我的代码:

i=0
header = True
for chunk in pd.read_json('filename.json.tsv', lines=True, chunksize=500):
        print("Processing chunk ", i)
        process_chunk(chunk, i)
        i+=1
        header = False
Run Code Online (Sandbox Code Playgroud)
def process_chunk(chunk, header, i):
    pk_file = 'data/pk_files/500_chunk_'+str(i)+'.pk'
    get_data_pk(chunk, pk_file) #load and process some columns and save into a pk file for future processing
    preds = get_preds(pk_file) #SVM prediction
    chunk['prediction'] = preds #append result column
    chunk.to_csv('result.csv', header = header, mode='a')
Run Code Online (Sandbox Code Playgroud)

process_chunk 函数基本上读取每个块并向其附加一个新列。

当我使用较小的文件时,它也能正常工作,如果我在 read_json 函数中指定 nrows=5000 也能正常工作。似乎出于某种原因,尽管有 chunksize 参数,它仍然需要完整的文件大小内存。

任何的想法?谢谢!

Don*_*zzi 2

我在使用 pandas v1.1.2 的项目虚拟环境之一中遇到了同样奇怪的问题。将 pandas 降级到 v1.0.5 似乎可以解决问题。

  • 事实证明,这可能是为了限制加载的总行数而引入的新功能“nrows”引入的错误:如果添加参数“nrows=<N>”,则N大于文件中的总行数- 在这种情况下 - 块大小限制再次起作用。 (4认同)