0

我想计算两列的 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")))
4

1 回答 1

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"]))
于 2019-09-01T02:09:43.773 回答