由于大变量导致内存不足



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

我正在做的一些分析是文本分析。它们包括:检测最频繁的标签/提及,分析标签的共同发生等。有时,我需要一次对数千条tweet执行这样的分析。我通常做的是创建一个变量,在其中存储所有tweet的文本,然后将该变量传递给给我想要的数据的方法(例如,哪些是最常见的标签等)。我像这样创建包含tweet文本的变量:

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集合中。

正如我所说的,代码运行了一小段时间,但随后被终止。我倾向于认为这是因为我如何处理tweet的文本数据:当游标返回大量tweet时,处理上述代码片段中的tweets_text等变量会消耗大量内存。

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

感谢您的帮助。

我很想在查找中添加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(或类似的)来调试内存分配。

最新更新