大内存的问题使用numpy的一个CSV文件中读取(major memory problems rea

2019-06-23 20:20发布

我从Kaggle抓起KDD TRACK1数据集,并决定加载〜2.5GB 3列CSV文件到内存中,在我的16GB大内存的EC2实例:

data = np.loadtxt('rec_log_train.txt')

蟒蛇吃了会了我所有的记忆(100%),然后被杀害。

然后I(经由函数read.table)读取使用R中的同一文件,它比RAM的5GB,其折叠到小于2GB后我称为垃圾收集器中使用更小。

我的问题是,为什么这下numpy的失败,什么是读取文件到内存中的正确方法。 是的,我可以用发电机和避免的问题,但这不是目标。

Answer 1:

import pandas, re, numpy as np

def load_file(filename, num_cols, delimiter='\t'):
    data = None
    try:
        data = np.load(filename + '.npy')
    except:
        splitter = re.compile(delimiter)

        def items(infile):
            for line in infile:
                for item in splitter.split(line):
                    yield item

        with open(filename, 'r') as infile:
            data = np.fromiter(items(infile), float64, -1)
            data = data.reshape((-1, num_cols))
            np.save(filename, data)

    return pandas.DataFrame(data)

这将读取2.5GB文件,串行输出矩阵。 输入文件被读入“懒惰”,所以没有中间数据结构是建立和最小的存储器被使用。 初始加载需要较长的时间,但(序列化的文件的)每个随后的负载是快的。 请让我,如果你有技巧!



Answer 2:

试用recfile现在: http://code.google.com/p/recfile/ 。 有一对夫妇的努力,我知道做一个快速的C / C ++的NumPy的文件阅读器; 这对熊猫我短暂的待办事项列表,因为它会导致这样的问题。 沃伦Weckesser也有这里的项目: https://github.com/WarrenWeckesser/textreader 。 我不知道哪一个是更好的,都去尝试一下?



Answer 3:

您可以尝试numpy.fromfile

http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html



文章来源: major memory problems reading in a csv file using numpy