【问题标题】:Running out of memory due to large variables Python由于大变量Python内存不足
【发布时间】:2021-09-30 18:43:02
【问题描述】:

我正在处理一个包含数百万条推文的大型 Mongo 集合。我正在使用远程 ubuntu 服务器运行 Python 脚本,该脚本调用一些方法来分析推文并将分析结果存储在单独的集合中。但是,脚本被杀死了,我怀疑这是因为我的内存不足。

我正在做的一些分析是文本分析。它们包括:检测最常见的主题标签/提及、分析主题标签的共现等。有时,我需要一次对数千条推文执行此类分析。我通常做的是创建一个变量来存储所有推文的文本,然后将该变量传递给为我提供所需数据的方法(例如,哪些是最常见的主题标签等)。我创建包含推文文本的变量,如下所示:

cursor = tweets_data_mongo_collection.find(query, {"_id": 0, "text": 1}, no_cursor_timeout = True)
tweets_text = ""
for doc in cursor:
    tweets_text = tweets_text + " " + doc["text"]

然后我将 tweets_text 传递给任何文本分析方法,并将分析结果存储在 Mongo 集合中。

正如我所说,代码运行 find 了一会儿,然后就被杀死了。我倾向于认为这是因为我处理推文的文本数据的方式:在上面的 sn-p 中处理诸如 tweets_text 之类的变量会在光标返回大量推文时消耗大量内存。

但是,我不确定如何克服这个问题。我对处理大数据还很陌生,所以我想知道我是否不知道我可以对我的代码/方法进行一些非常基本的更改来避免这些内存问题。

非常感谢任何帮助。

【问题讨论】:

    标签: python-3.x mongodb out-of-memory bigdata pymongo


    【解决方案1】:

    我很想在查找中添加limit 并使用join 连接结果,例如

    cursor = tweets_data_mongo_collection.find(query, {"_id": 0, "text": 1},
                                               no_cursor_timeout = True).limit(100000)
    tweets_text = " ".join(list(cursor))
    

    如果您仍然有内存问题,您可以使用tracemalloc(或类似的)来调试内存分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多