我有一个数据集,我想从中创建新的合成样本。问题分为两部分。
第1部分:每行找出5个最近邻居。我想在不使用笛卡尔的情况下以分布式方式找出邻居。如何找到整行数据集的行的欧氏距离,即访问其他工作人员上的行。
第2部分:在找到邻居之后,我将采取每一行并以分布式方式从我们在第1部分中找到的5个邻居中的任何一个中随机抽取的最近邻居中减去它。当我想用rdd或dataframe执行此操作时会出现问题。在rdd中,map函数一次只占一行,即使我有邻居的索引,我也无法访问它最近的邻居。类似地,在数据帧中的udf中。此外,我不想在rdd或dataframe上使用过滤器来查找具有已知索引的最近邻居,因为它对于非常大的数据集来说很慢。另外,我无法在驱动程序中保存最近邻居的数据并进行广播,因为它的大小也非常大。
感谢您的帮助!
答案 0 :(得分:0)
我终于在@ zero323 https://stackoverflow.com/users/1560062/zero323
的帮助下找到了答案在pypsaprk.ml.feature的Spark 2.2.0中有一个函数可用作BucketedRandomProjectionLSH,通过它可以计算最近邻居。 https://github.co2m/apache/spark/blob/d9f4ce6943c16a7e29f98e57c33acbfc0379b54d/python/pyspark/ml/feature.py#L197