我在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条答案
按热度按时间kuhbmx9i1#
你的职能
dist
什么都不退。它称之为print
函数,它不返回任何内容。当然,它会打印出来None
.更改
print
至return
我想你会更快乐。