spark:最小化过滤功能的调用次数

时间:2016-08-22 20:06:22

标签: python mongodb apache-spark pyspark rdd

我有以下代码:(python)

def do_mongo_filter(record):
    from pymongo import MongoClient
    MongoClient(MONGO_URI)
    collection = MongoClient(MONGO_URI)[<db_name>][<collection_name>]
    return collection.find_one({'_id': record[0]}) is not None

rdd_after_filter = rdd_before_filter.filter(do_mongo_filter)

我的问题是:
 1.我知道mongo家伙已经写了这个火花连接器&#34; pymongo_spark&#34;,但据我所知,我只能用它来写一个完整的rdd,或者阅读完整的系列。
我不能用它来过滤结果,就像我在这个例子中需要的那样。我纠正了吗?  2.这样使用它会变得很糟糕,一遍又一遍地导入并建立连接,有什么建议吗?  3.它基本上继续第二个问题,让我们说rdd是10M值,它是一个键值rdd,键是排序的。我怎么能不调用10M次过滤功能,而只能使用唯一键?

我试着按照以下方式思考:

only_unique_keys = rdd_before_filter.keys().map(lambda x: (x,x)).reduceByKey(x,y: x)
keys_in_mongo = only_unique_keys.filter(do_mongo_filter)
rdd_after_filter = rdd_before_filter.filter(lambda x: x in keys_in_mongo.toLocalIterator())

但同样,它有很多记录。

0 个答案:

没有答案