记录下自己的心路历程…耗时耗精力
我用的数据库单个表格就很大,一个表格有30多G,jupyter无法处理这么大的表格,会直接把电脑的进程全部结束掉,结束掉要是能运行成功倒也行啊,然鹅…给我报错说处理不了,罢工了…
有想过用pycharm来处理,试了下,也不行,文件太大了,处理不了,在网上搜怎么处理这种大文件,有这么几个解决办法:
1. Dask: Dask 是一个用于并行计算的灵活库,它提供了类似于 Pandas 的接口,但能够处理比内存更大的数据集。你可以使用 Dask DataFrame 来处理大型数据,它允许你进行分布式计算,将数据分块加载到内存中。
import dask.dataframe as dd
读取大型CSV文件
df = dd.read_csv('your_large_file.csv')
执行操作(例如,过滤、聚合)
result = df[df['column_name'] > 100].groupby('another_column').mean()
将结果写入文件
result.to_csv('output.csv', single_file=True)
2. 分块处理: 使用 Pandas 的 read_csv 方法时,可以使用 chunksize 参数,将数据集分割成小块进行处理,而不是一次性读入整个数据集。这可以减少内存压力。
chunk_size = 100000 # 适当调整块的大小
chunks = pd.read_csv('your_large_file.csv', chunksize=chunk_size)
for chunk in chunks:
# 处理每个块的数据
3. 合理选择数据类型: 确保使用适当的数据类型,以减少内存使用。例如,将整数列转换为 int32 或 int64,将浮点数列转换为 float32 或 float64。
4. 使用合适的硬件: 如果可能,考虑使用具有大量内存的计算机或云实例。处理大型数据集可能需要更大的内存。
1 2 的方法适用于表格文件行之间没有关联的,如果表格每行之间都是独立的,可以考虑1 2的方法;3的话会改变数据类型,在我的项目中不太适用这个方法,于是想找云服务器来处理,以下是云服务器的历程…
– 本来想用谷歌云,听说怪好用的,但死在了第一步,visa银行卡没有
– 于是转战国内的阿里云,说实话阿里云感觉有点坑,而且选择项太多了,之前没用过,对新手不友好
– 想到了Kaggle,以前只知道是打比赛的,进去一看也有在线notebook,界面很简洁,新手友好型,还能上传自己的数据库,能传100G,不过单个文件也一次只能处理20G
最后,没法了就用postgresql先处理了一下表格,把不需要的列删除,很奇怪的是,在我删了五六列后其大小没变小反而增到了40G,搜了下,可能是postgre缓存了些数据,用这个语句可以删除缓存的内容:
--删除缓存
VACUUM ANALYZE 你的表格名;
--察看文件大小
SELECT pg_size_pretty(pg_total_relation_size('你的表格名'));
其实…这样之后我的表格还是没变小,我用上面那个语句查我的表格还是40G,但是!!!!!!!!我将其export后,它的大小是18G,差不多满足Kaggle处理文件的size,后来想了下原因,可能是它需要时间来放空间??
反正就这样了,把处理后的数据传到kaggle上就好了!总结:
- 如果不是很复杂的表格操作的话,建议用postgresql来处理表格,它没大小限制;
- 如果表格间数据没有强相关性,可以考虑分块、并行处理;
- 可以借助云服务器来编程,还不耗计算机内存,推荐Kaggle,只是它传数据库要好久…我传30G用了一晚