Получение схожести Jaccard между двумя столбцами в одном кадре данных

Я хочу вычислить сходство по Джакарду двух столбцов, и я не думаю, что в PySpark есть такая функция. Я не уверен, что это лучший способ вычислить это.

Например, скажем, что у нас есть 1 кадр данных, который выглядит следующим образом:

| str1 | str2 |
===============
|  hi  |   h  |
|  me  |   p  |

Все эти столбцы имеют тип String, и конечный результат должен выглядеть следующим образом:

| str1 | str2 | jaccard |
=========================
|  hi  |   h  |    0.5  |
|  me  |   p  |    0    |

Я написал UDF, как это, но это не работает. Я все еще новичок в Spark, поэтому он должен быть сломан. Я открыт для любых решений, если они точно вычисляют симуляцию Jaccard из 2 столбцов в 1 кадре данных.

jaccard = udf(lambda x, y: len(set(x).intersection(y))/len(set(x).union(y)))
candidates = candidates.withColumn("jaccard", jaccard(col("str1"), col("str2")))

1 ответ

Я думаю, что я отладил свой собственный ответ. Следующий код возвращает сходство с 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"]))
Другие вопросы по тегам