代码之家  ›  专栏  ›  技术社区  ›  jeangelj

Python内存不足导致计算机崩溃

  •  1
  • jeangelj  · 技术社区  · 8 年前

    如果这是一个重复的问题,请提前原谅-我搜索了stackoverflow,但没有发现这个问题是这样问的。

    你推荐什么?pyspark是最好的方式吗?我是spark的新手,spark有没有类似jupyter笔记本的东西?

    非常感谢你

    1 回复  |  直到 8 年前
        1
  •  1
  •   ArchimedesMP    8 年前

    tl;dr:要么分块阅读,要么试试看 mmap .

    这在很大程度上独立于python,因为您似乎试图将比实际RAM更多的数据加载到主内存中。您的操作系统将尝试通过将多余和/或不需要的数据放在硬盘/ssd上进行补偿[速度非常慢-单CPU Skylake系统可以达到30GB/s以上,快速NVMe ssd可能达到2GB/s,而您的普通HDD在0.1GB/s范围内]。Windows称之为虚拟内存,在Linux上是交换的,在Mac上我不知道。

    假设您有一个包含数百万行的huuuge文本文件,那么您可以一次处理一行。一些perlish伪代码:

    $FH = open ("myhugefile");
    while ($line = getLine ($FH)) {
         process ($line);
    }
    close $FH;
    

    你尝试做的似乎更像这样:

    $FH = open ("myhugefile");
    $array = new Array ();
    while ($line = getLine ($FH)) {
        push ($array, $line);
    }
    close $FH;   
    foreach ($line in $array) {
        process ($line);
    }
    

    $array 如果存储在内存中,则第二种方法在处理大型数据集时会出现一些问题。

    如果你的课程 process()

    在编译器构造课程中,我参加了另一个学生使用的 将文件读入他的解析器。这被证明是 非常

    无论如何,背后的基本思想 mmap 就是让操作系统将文件映射到内存中。然后,它将为您动态加载内容,而您可以像普通内存对象一样访问它。

    https://en.wikipedia.org/wiki/Mmap

    Python2文档及其示例: https://docs.python.org/2/library/mmap.html (看起来很简单)

    推荐文章