Ale*_*lex 1 python apache-spark pyspark
如何在 pyspark 数据框中找到两列之间的余弦相似度?
假设我有一个火花数据框
|a |b |
+--+--|
|1 |4 |
|2 |5 |
|3 |6 |
+--+--+
Run Code Online (Sandbox Code Playgroud)
现在我想知道a列中的值和b列中的值之间的余弦相似度是多少,即,
cosine_similarity([1, 2, 3], [4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
我假设您想找到 2 列之间的相似性。说你有这个数据框:
df = spark.createDataFrame(pd.DataFrame([[1,2], [3,4]], columns=['a', 'b']))
Run Code Online (Sandbox Code Playgroud)
制作简单的函数来获取数据框和两个列名。
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'])
cosine_similarity(df, 'a', 'b') # output 0.989949
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |