从多个文件中读取大数据并在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 循环慢,因为该过程需要序列化和反序列化。而且我不确定从子流程返回的大值。

使用QeueujoblibRay 是否最有效?

【问题讨论】:

如果您需要单个数据帧作为输出,我认为这些都不会真正帮助您。您将花费大量时间在最终流程中连接数据。 我只需要一个列表,例如 [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

Pig 无法处理大文件

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?

Groupby并在pandas中执行多个函数的聚合

Java怎样一行读入多个数据