我想计算两列的Jaccard相似度,但我认为PySpark中没有类似的功能。我不确定什么是最好的计算方法。
例如,假设我们有1个看起来像这样的数据框:
| str1 | str2 |
===============
| hi | h |
| me | p |
这些列都是Stringtype,最终结果应如下所示:
| str1 | str2 | jaccard |
=========================
| hi | h | 0.5 |
| me | p | 0 |
我写了这样的udf,但是它不起作用。我对Spark还是很陌生,所以必须打破。我愿意接受任何解决方案,只要它可以在1个数据帧中准确计算2列的Jaccard sim。
jaccard = udf(lambda x, y: len(set(x).intersection(y))/len(set(x).union(y)))
candidates = candidates.withColumn("jaccard", jaccard(col("str1"), col("str2")))
答案 0 :(得分:0)
我想我调试了自己的问题。以下代码返回了Jaccard的相似性。
jac = f.udf(lambda x, y: float(len(set(x).intersection(y)))/float(len(set(x).union(y))))
myDF = myDF.withColumn("jaccard", jac(myDF["str1"], myDF["str2"]))