读取和处理多个大型数据文件的良好做法?
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。
【讨论】:
以上是关于读取和处理多个大型数据文件的良好做法?的主要内容,如果未能解决你的问题,请参考以下文章
pandas处理csv文件时,添加索引 2019-02-27
在大型 .csv 文件上应用 DBSCAN 会导致磁盘使用量超过 100% 并挂起我的电脑 [重复]