从多个文件中读取大数据并在python中聚合数据的最快方法是啥?
Posted
技术标签:
【中文标题】从多个文件中读取大数据并在python中聚合数据的最快方法是啥?【英文标题】:What is the fastest way to read large data from multiple files and aggregate data in python?从多个文件中读取大数据并在python中聚合数据的最快方法是什么? 【发布时间】: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
会比从多个进程中读取并连接它们更快吗?
你必须测量它,不是吗?
【参考方案1】:
读取 csv 很快。我会读取列表中的所有 csv,然后将列表连接到一个数据帧。这是我的用例中的一些代码。我在我的路径中找到所有 .csv 文件,并将 csv 文件名保存在变量“结果”中。然后我循环文件名并读取 csv 并将其存储在列表中,然后我将其连接到一个数据帧。
data = []
for item in result:
data.append(pd.read_csv(path))
main_df = pd.concat(data, axis = 0)
我并不是说这是最好的方法,但这对我很有用:)
【讨论】:
以上是关于从多个文件中读取大数据并在python中聚合数据的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
从 .txt 文件中读取数据并在 Python 中计算平均值
apache-beam 从 GCS 存储桶的多个文件夹中读取多个文件并加载它 bigquery python