【发布时间】:2021-12-23 16:43:43
【问题描述】:
我有很多文件:1.csv、2.csv ... N.csv。我想阅读它们并聚合一个DataFrame。但是在一个进程中顺序读取文件肯定会很慢。那么我该如何改进呢?此外,还使用了 Jupyter notebook。
另外,我对“python进程之间解析参数或返回值的成本”有点困惑
我知道这个问题可能是重复的。但是我发现大多数答案都是使用多进程来解决的。多进程确实解决了GIL 问题。但根据我的经验(可能是错误的):将大数据(如 DataFrame)作为子进程的参数解析比单个进程中的 for 循环慢,因为该过程需要序列化和反序列化。而且我不确定从子流程返回的大值。
使用Qeueu 或joblib 或Ray 是否最有效?
【问题讨论】:
-
如果您需要单个数据帧作为输出,我认为这些都不会真正帮助您。您将花费大量时间在最终流程中连接数据。
-
我只需要一个列表,例如 [df1, ... dfN] 或 [[row11, row12, .. row1M] ... [rowN1...rowNM]],然后是pd.concat 是不可避免的,不是帖子的关注点。
-
如果所有的 CSV 文件都是同质的,为什么不把它们
cat放在一起并读取单个文件呢? (或从cat *.csv管道读取。) -
那么从单个进程中读取
cat *.csv会比从多个进程中读取并连接它们更快吗? -
你必须测量它,不是吗?