python - PYSPARK:如何找到 pyspark 数据框中两列的余弦相似度?

标签 python apache-spark pyspark

如何找到 pyspark 数据帧中两列之间的余弦相似度?

假设我有一个 spark 数据框

|a |b |
+--+--|
|1 |4 |
|2 |5 |
|3 |6 |
+--+--+

现在我想知道 a 列中的值与 b 列中的值之间的余弦相似度是多少,即

cosine_similarity([1, 2, 3], [4, 5, 6]) 

最佳答案

我假设您想要找到 2 列之间的相似性。说你有这个数据框:

df = spark.createDataFrame(pd.DataFrame([[1,2], [3,4]], columns=['a', 'b']))

制作简单的函数来获取数据框和两个列名。

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

关于python - PYSPARK:如何找到 pyspark 数据框中两列的余弦相似度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880218/

相关文章:

pandas - 将 spark DataFrame 转换为 pandas DF

pyspark - 在 pyspark 中使用 groupby 时无法获取所有列

python Pandas : pivot only certain columns in the DataFrame while keeping others

python - 对于 Base64 编码,更喜欢 str.encode ('base64_codec' ) 或 base64.b64encode(str)?

python - 在 python 中,如果文件以一组特定的字母开头,我如何从循环中排除文件?

python - 无法将字符串转换为数据 - python

scala - 删除 Spark 字符串列的第一个字符

java - Spark SQLContext 找不到 Hive 表

apache-spark - 我可以以编程方式运行Zeppelin笔记本吗?

python - Pyspark 为包含时间范围的记录创建多行