读取和处理多个大型数据文件的良好做法?

Posted

技术标签:

【中文标题】读取和处理多个大型数据文件的良好做法?【英文标题】:Good Practices for reading and handling multiple large data files? 【发布时间】:2021-03-14 11:08:49 【问题描述】:

如果我有几个大文件 JSON 文件(500MB 压缩,3GB 未压缩),有什么好的做法可以使用它们?

我试过了:

combined_list = []
with gzip.open("compressed_JSON.gz", "r") as file:
    for each in file:
        combined_list.append(json.loads(each))

# do stuff with newly appended list (dataframe,
 calculations, visualization etc)

这需要相当长的时间。另外,我的内存在执行过程中几乎全部消耗,即使完成后仍有大量内存处于“使用”状态。

或者,我尝试过:

combined_list = []
with gzip.open("compressed_JSON.gz", "r") as file:
    for each in file:
        combined_list.append(json.loads(each))
with gzip.open("compressed_JSON2.gz", "r") as file2:
    for each in file2:
        combined_list.append(json.loads(each))

# do stuff with newly appended list (dataframe,
 calculations, visualization etc)

同时执行五个文件中的两个。与第一种方法相比,它可能需要 7-8 倍的时间。我无法想象我将如何处理所有 5 个问题。

我已经尝试过相同的方法,但没有附加(因此逐行读取),这要快得多,但这意味着我只能得到它最后迭代的对象。

通过sys.getsizeof() 完成的附加列表的大小只有大约 10MB,所以我不确定在代码运行完成后是什么继续“吃掉”我的资源。

提前致谢。

【问题讨论】:

【参考方案1】:

可能不是 100% 您正在寻找的东西,但请考虑一下:

我不得不解析和破坏一个 11G 文件。然而是纯文本。 首先尝试了 Python,但也遇到了问题。我最终做的是使用 C# 解析文件,多线程处理数据并最终写入 numpy-array,使用 https://github.com/SciSharp/Numpy.NET

如果您有 5 个不同的文件,您也可以多线程执行此操作,前提是您有足够的 RAM。

HTH。

【讨论】:

以上是关于读取和处理多个大型数据文件的良好做法?的主要内容,如果未能解决你的问题,请参考以下文章

在Python中处理大型文件的最快方法

java io读取文件时 数据中有连续多个空格怎么处理

pandas处理csv文件时,添加索引 2019-02-27

在大型 .csv 文件上应用 DBSCAN 会导致磁盘使用量超过 100% 并挂起我的电脑 [重复]

在 react-redux 应用程序中获取详细 api 数据的良好做法

C# 中的密集文件 I/O 和数据处理