python - 将大型 .bz2 文件加载和聚合到熊猫中的有效方法是什么?
问题描述
我正在尝试以块的形式加载一个大的 bz2 文件并聚合到一个 pandas DataFrame 中,但是 Python 一直在崩溃。我使用的方法如下,我在较小的数据集上取得了成功。将大于内存的文件聚合到 Pandas 中的更有效方法是什么?
数据是行分隔的 json 压缩到 bz2,取自https://files.pushshift.io/reddit/comments/(所有公开的 reddit 评论)。
import pandas as pd
reader = pd.read_json('RC_2017-09.bz2', compression='bz2', lines=True, chunksize=100000) df = pd.DataFrame() for chunk in reader:
# Count of comments in each subreddit
count = chunk.groupby('subreddit').size()
df = pd.concat([df, count], axis=0)
df = df.groupby(df.index).sum()
reader.close()
编辑:当我使用 chunksize 1e5 时,Python 崩溃了。当我将块大小增加到 1e6 时,该脚本起作用了。
解决方案
我使用了这个迭代器方法,它对我有用,没有内存错误。你可以试试。
chunksize = 10 ** 6
cols=['a','b','c','d']
iter_csv = pd.read_csv(filename.bz2, compression='bz2', delimiter='\t', usecols=cols, low_memory=False, iterator=True, chunksize=chunksize, encoding="utf-8")
# some work related to your group by replacing below code
df = pd.concat([chunk[chunk['b'] == 1012] for chunk in iter_csv])
推荐阅读
- python - 在PostgreSQL13函数中使用plpython连接pymssql报错
- c++ - 在 vs 代码中链接到 .dylib
- powerbi - Dax Measure 计算每周系列
- c++ - 使用不同类型提升 program_options 值
- java - 1L和(长)1的区别
- wpf - 从资源中使用图标时,仅显示 XAML 中的最后一个图标
- caching - ServiceWorkers 和 Next.js:如何将生产环境中的 Service Worker 与 next.js 应用程序集成?
- rest - 我的rest api uri名称包含资源所属的模块名称的最佳方式是什么?
- javascript - 我的 javascript 如何获取 Flask Python 路由返回的 json 结果?
- anylogic - 在 Anylogic PLE 中使用 RL4J 训练深度强化学习模型的最佳方法是什么?