在 pyspark 中实现 class 不平衡算法

Implementing class imbalance algorithm in pyspark

我有一个数据集,我想从中创建新的合成样本。问题有两部分。

第 1 部分:要为每一行找出 5 个最近的邻居。我想在不使用笛卡尔的情况下以分布式方式找出邻居。我怎样才能找到整个数据集的行的欧几里得距离,即访问其他工作人员上存在的行。

第 2 部分:找到邻居后,我将以分布式方式从我们在第 1 部分中找到的 5 个邻居中随机抽取的最近邻居中减去每一行。当我想用 rdd 或 dataframe 做这个时,问题就出现了。在 rdd 中,map 函数一次只获取一行,即使我有邻居的索引,我也无法访问它最近的邻居。同样在数据框中的 udf 中。此外,我不想在 rdd 或 dataframe 上使用过滤器来查找具有已知索引的最近邻居,因为它对于非常庞大的数据集来说很慢。另外,我无法将最近邻居的数据保存在驱动程序上并广播它,因为它也将非常大。

感谢您的帮助!

终于在@zero323的帮助下找到了答案https://whosebug.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