Pyspark 上两点之间的欧氏距离

Euclidean Distance between two points on Pyspark

我在 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)]

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

[((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 函数对多个点执行此操作时,我得到的是 none 而不是质心。

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)]

我在这里做错了什么?非常感谢您的帮助。

你的函数 dist 没有 return 任何东西。它调用 print 函数,return 什么都没有。自然地,它打印 None.

print改为return,我想你会更快乐。