为啥 Numpy 和 Pandas 数组比源数据消耗更多内存? [关闭]
Posted
技术标签:
【中文标题】为啥 Numpy 和 Pandas 数组比源数据消耗更多内存? [关闭]【英文标题】:Why Numpy and Pandas arrays consuming more memory than source data? [closed]为什么 Numpy 和 Pandas 数组比源数据消耗更多内存? [关闭] 【发布时间】:2015-09-25 06:31:16 【问题描述】:我是 bigdata 新手,我想解析整个数据,所以当我尝试使用 numpy 数组处理 1 GB 数据时,我无法拆分它,它需要 4GB 内存(我正在实时处理大量数据)。是否有任何优化方法可以将这些数组用于这么多数据或任何特殊功能来处理大量数据。
【问题讨论】:
如何测量“1 GB”数据?是 1 GB 的文本文件,还是 10 亿个byte
类型的变量,还是别的什么?
【参考方案1】:
内存消耗在很大程度上取决于数据的存储方式。例如1
作为字符串只需要一个字节,作为 int 它需要两个字节和八个字节作为双精度。然后是在DaataFrame
和Series
的对象中创建它的开销。所有这些都是为了高效处理。
作为一般经验法则,内存中的数据表示将比存储中的大小更大。
BigData 是指太大而无法放入内存(或在单台机器上处理)的数据。因此,解析整个数据并将其加载到内存中是没有意义的。
所有 BigData 处理引擎都依赖于将数据拆分为块并单独(并行)处理这些块,然后将这些中间结果合并为一个。
【讨论】:
哈!我写的是完全相同的东西(用同样的例子),干得好!int
占用两个字节?是为微控制器编程吗? :) Python 中的 int
占用超过 2 个字节。我不认为 Python 曾经有 2 字节 int
s。
@Alex.S 这是一个描述概念的例子。在 python 中,int 的上限仅受可用内存的限制。它因每种语言而异,在 C/C++ 中为 2 个字节,在 java 中为 4 个字节,依此类推
@Alex.S - numpy
确实有 2 字节整数(即 np.int16
和 np.uint16
),并且它们被广泛使用。鉴于这是一个numpy
的问题,这根本不是不合理的。事实上,OP 的来源可能相当于在 np.int16
的数据上调用 data.astype(int)
。以上是关于为啥 Numpy 和 Pandas 数组比源数据消耗更多内存? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
数据分析2 numpy(ndarray数组,属性,创建,索引切片,运算,函数,随机数), Pandas(Series创建,缺失值处理,特性,索引,DataFrame)
为啥 numpy 函数在 pandas 系列/数据帧上这么慢?
JSON - 使用 numpy 数组条目序列化 pandas 数据帧