我想计算两列的 Jaccard 相似度,但我认为 PySpark 中没有这样的函数。我不确定计算它的最佳方法是什么。
例如,假设我们有 1 个如下所示的数据框:
| str1 | str2 |
===============
| hi | h |
| me | p |
这些列都是字符串类型,最终结果应如下所示:
| 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")))