PySp中所有与所有比较

2024-06-07 15:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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本身太耗时了。 任何帮助都将不胜感激。在


Tags: 实例函数id列表排序顺序train相似性
1条回答
网友
1楼 · 发布于 2024-06-07 15:35:10

面对一个非常相似的问题,我最终“手动”计算相似性分数,而不是使用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项的笛卡尔积,然后重新组合它们

相关问题 更多 >

    热门问题