我对PySpark比较陌生。在
我有2M列车实例和4M测试实例。每个实例由一个id和一个特征向量表示。我有一个自定义函数,它计算两对实例之间的相似性。在
作为输出,我希望每个测试实例都有一个列实例的排序顺序。这是一个非常常见的问题,但实例的数量是一个挑战。在
因为我必须进行全vs all比较,所以我在PySpark中使用了cartesian
乘积函数,如下所示:
train_testpairs = trainRDD.cartesian(testRDD)
train_testpairs_simscores = train_testpairs.map(myscore)
在train_testpairs_simscores中,我有以下类型的元组:
^{pr2}$但是,现在我需要每个测试实例的列车实例的排序顺序,例如:
test_id1,[train_id432, train_id832,.....]
我知道,对于每个测试,这将有一个2米大小的列表。因此,这个列表中有n%也是可以的,比如最接近测试id的前1000个列车实例
我怎样才能做到这一点?在
我试图按testID分组,然后在每个列表中进行排序,但是groupBy
本身太耗时了。
任何帮助都将不胜感激。在
面对一个非常相似的问题,我最终“手动”计算相似性分数,而不是使用
cartesian()
:这样可以避免扩展2m*4m项的笛卡尔积,然后重新组合它们
相关问题 更多 >
编程相关推荐