Получение схожести 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"]))