2016-11-29 3 views
0

트윗으로 채워지는 mongodb 인스턴스가 있고 저는 PyMongo를 드라이버로 사용하고 있습니다. 각 트윗에는 언어를 지정하는 필드가 있습니다. 나는 다음과 같은 집계 쿼리를 가지고 : 나는 다음과 같은 테스트 기능을 호출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'. 나는 'ru'와 일치하는 약 17K 짹짹과 'en'을위한 13million 짹짹이 있습니다. 내가 'ru'트윗으로 실행할 때 몽고 셸과 스크립트에서 모두 작동하지만 '트위터'트윗으로 시도하면 스크립트가 멈추고 완료되지 않습니다.

mongo 셸에서 'en'에 대한 집계가 성공적으로 완료되었습니다. 스크립트에서 실행할 때 mongo 셸에서 작업을 검사하여 시작하고 완료하는 것을 볼 수는 있지만 출력을 얻지는 못합니다.

파이썬 스크립트의 경우 데이터베이스에서 성공적으로 처리되었지만 컬렉션의 더 큰 하위 집합을 집계하려고하면 결과가 반환되지 않습니다. 나는 Pymongo에서 예외를 잡으려고 애썼다. 나는 시간이 부족하다고 생각하지만 그것이 무엇인지 어떻게 잡을 수 있는지 알 수 없다.

답변

0

나는 이걸 보러 온 다른 사람들을 위해 mongoshell을 통해 장기 실행 쿼리를 실행하기로 결정했습니다. mongoshell을 통해 집계를 실행하고 컬렉션으로 출력하고 거기에서부터 이동합니다.