【问题标题】:Euclidean Distance between two points on PysparkPyspark上两点之间的欧几里得距离
【发布时间】:2023-03-25 15:59:01
【问题描述】:

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

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

【问题讨论】:

    标签: python apache-spark pyspark k-means euclidean-distance


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 2013-02-12
      • 2020-09-25
      • 2019-06-19
      • 2021-01-30
      • 2023-03-12
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多