条目与列之间的Pyspark欧式距离

Yon*_*won 5 euclidean-distance pyspark

我正在与pyspark合作,想知道在数组的一行条目和整个列之间是否有任何聪明的方法来获取欧氏距离。例如,有一个像这样的数据集。

+--------------------+---+
|            features| id|
+--------------------+---+
|[0,1,2,3,4,5     ...|  0|
|[0,1,2,3,4,5     ...|  1|
|[1,2,3,6,7,8     ...|  2|
Run Code Online (Sandbox Code Playgroud)

选择一列,即id == 1,然后计算欧几里德距离。在这种情况下,结果应为[0,0,sqrt(1 + 1 + 1 + 9 + 9 + 9)]。有人能找出如何有效地做到这一点吗?谢谢!

may*_*wal 5

如果您想要欧几里得语用于带有列的固定条目,只需执行此操作。

import pyspark.sql.functions as F
from pyspark.sql.types import FloatType
from scipy.spatial import distance

fixed_entry = [0,3,2,7...] #for example, the entry against which you want distances
distance_udf = F.udf(lambda x: float(distance.euclidean(x, fixed_entry)), FloatType())
df = df.withColumn('distances', distance_udf(F.col('features')))
Run Code Online (Sandbox Code Playgroud)

您的df将有一列距离。