PySpark中的所有比较

时间:2015-08-17 21:48:40

标签: python apache-spark pyspark

我对PySpark比较陌生。

我有2M列车实例和4M测试实例。每个实例由id和特征向量表示。我有一个自定义函数来计算两对实例之间的相似性。

作为输出,我想要每个测试实例,列车实例的排名顺序。这是一个非常常见的问题,但实例的数量是挑战。

因为,我必须进行全对比比较,我在PySpark中使用了with open('output.txt','w') as f: retcode = subprocess.call('tar xvd Test.tar', stdout=f, stderr=f) 产品函数,如下所示:

cartesian

在,train_testpairs_simscores中,我有以下类型的元组:

 train_testpairs = trainRDD.cartesian(testRDD)
 train_testpairs_simscores = train_testpairs.map(myscore)

但是,现在我想要每个测试实例的列车实例的排序顺序,例如:

 (train_id,test_id,score)

据我所知,对于每个test_id,这将有一个2M大小的列表。因此,拥有此列表的n%也可以。最接近测试ID的前1000列车实例。

我怎样才能做到这一点?

我试图通过testID进行分组,然后在每个列表中进行排序,但 test_id1,[train_id432, train_id832,.....] 本身太耗时。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

面对一个非常类似的问题,我最终手动计算了相似度得分'而不是使用cartesian()

def f(train_instance):
   return train_instance,sorted(myscore(train_instance,test_instance) for test_instance in TEST_INSTANCES)

trainRDD.map(f)
这样你就可以避免扩展2m * 4m项目的笛卡尔积,然后重新组合它们