Pyspark上两点之间的欧几里得距离

Posted

技术标签:

【中文标题】Pyspark上两点之间的欧几里得距离【英文标题】:Euclidean Distance between two points on Pyspark 【发布时间】:2021-05-23 01:55:57 【问题描述】:

我在 pyspark 中定义了一个函数来计算我的质心和我拥有的一堆点之间的欧几里得距离。

def dist(x):
  b = 'd1':distance.euclidean((6,8),x),'d2':distance.euclidean((1,2),x),'d3':distance.euclidean((5,5),x)
  def get_key(val):
    for key, value in b.items():
      if val == value:
        return key
  print(get_key(min(b.values())))

我的观点如下

数据 = [(3.023, 5.138), (3.075, 4.989), (2.321, 5.35), (3.328, 4.944), (3.195, 5.186)]

我的目标是将所有这些点输入到我的函数中,然后我得到每个点的最近距离。我期望的输出的一个假设示例有点像这样

[((3.023, 5.138),d1),
 ((3.075, 4.989),d1),
 ((2.321, 5.35),d2),
 ((3.328, 4.944),d1),
 ((3.195, 5.186),d3)]

当我将单个点输入此函数时,它可以完美运行,但是,当我尝试使用 lambda 函数对多个点执行此操作时,我得到的不是质心。

data.map(lambda x:(x,dist((x)))).take(5)

(1) Spark Jobs
Out[17]: [((3.023, 5.138), None),
 ((3.075, 4.989), None),
 ((2.321, 5.35), None),
 ((3.328, 4.944), None),
 ((3.195, 5.186), None)]

我在这里做错了什么?不胜感激。

【问题讨论】:

【参考方案1】:

您的函数dist 不返回任何内容。它调用print 函数,该函数不返回任何内容。自然会打印出None

print 更改为return,我猜你会更开心。

【讨论】:

以上是关于Pyspark上两点之间的欧几里得距离的主要内容,如果未能解决你的问题,请参考以下文章

各种距离算法汇总

两个坐标列表的欧几里得距离矩阵

欧几里得距离曼哈顿距离切比雪夫距离

基础概念--欧式距离

M-各种距离定义

机器学习 - 距离计算