PyMongo聚合脚本没有响应

时间:2016-11-29 18:38:27

标签: python mongodb shell twitter pymongo

我有一个充满推文的mongodb实例,我使用PyMongo作为驱动程序。每条推文都有一个指定其语言的字段。我有以下聚合查询:

def get_top_k_hashtags(client, db_name, lang_list, k_filter):
  k_filter_base = k_filter
  k_filter = "$" + k_filter
  dbo = client[db_name]
  pipeline = [
      {"$match": {"lang": {"$in": lang_list}}},
      {"$project": {k_filter_base: 1, "_id": 0}},
      {"$unwind": k_filter},
      {"$group": {"_id": k_filter + ".text", "count": {"$sum": 1}}},
      {"$sort": SON([("count", -1), ("_id", -1)])}
 ]
 return dbo.tweets.aggregate(pipeline, allowDiskUse=True)

我用以下测试函数调用

def test_get_top_k_hashtags(client, db_name, lang_list, k_filter):
  frequency = []
  cursor = get_top_k_hashtags(
      client, db_name, lang_list, k_filter)
  for document in cursor:
      frequency.append({'hashtag': document['_id'],
                      'value': document['count']})
  pprint(frequency)
  write_json_file('hashtag_distribution', DATA_PATH, frequency)

test_get_top_k_hashtags(client, 'twitter', ['ru'], 'entities.hashtags')

我正在做的是获取特定语言下所有主题标签的总计数,在这种情况下是' ru'。我有大约17K的推文匹配' ru'以及' en'以及1300万条推文。当我使用' ru'运行它时,聚合在mongo shell和我的脚本中都有效。推文,但是当我尝试它的时候。推文脚本挂起,永远不会完成。

为' en'运行聚合在mongo shell中成功完成。当我从脚本运行它时,我可以检查mongo shell中的操作并看到它启动和完成,但我从来没有得到任何输出。

问题是,对于Python脚本,当我尝试聚合集合的更大子集时,即使在db中成功处理了结果,也不会返回结果。我试过从Pymongo捕捉异常无济于事。我怀疑某些东西已超时,但我无法弄清楚它是什么或如何抓住它。

1 个答案:

答案 0 :(得分:0)

对于任何可能出现并且看到这一点的人,我决定通过mongoshell运行我长时间运行的查询。我通过mongoshell运行我的聚合并输出到一个集合并从那里开始。