【发布时间】:2022-01-16 13:30:55
【问题描述】:
我正在尝试在 pyspark 数据框中找到两列类型数组之间的余弦相似度,并将余弦相似度添加为第三列,如下所示
| Col1 | Col2 | Dot Prod |
|---|---|---|
| [0.5, 0.6 ... 0.7] | [0.5, 0.3 .... 0.1] | dotProd(Col1, Col2) |
我目前的实现是:
import pyspark.sql.functions as func
def cosine_similarity(df, col1, col2):
df_cosine = df.select(func.sum(df[col1] * df[col2]).alias('dot'),
func.sqrt(func.sum(df[col1]**2)).alias('norm1'),
func.sqrt(func.sum(df[col2] **2)).alias('norm2'))
d = df_cosine.rdd.collect()[0].asDict()
return d['dot']/(d['norm1'] * d['norm2'])
但我猜上面的代码只适用于具有整数值的列。无论如何我可以扩展上述函数以实现数组列的类似行为
【问题讨论】:
标签: python apache-spark pyspark