#python #apache-spark #pyspark #apache-spark-sql
Вопрос:
Я пытаюсь вычислить сходство между двумя строками в фрейме данных, поэтому я искал и нашел levehstein distance
то, что мне не помогает.
В моем случае строки разделены запятой ,
, поэтому я хочу вычислить сходство между двумя столбцами, и вот пример:
как показано на этом изображении , я хочу сопоставить список строк col 1 со списком строк в col2 и вычислить сходство между ними следующим образом : {количество абзацев в col1 ,совпадающих с теми, что в col2}/{количество абзацев в col 2} поэтому, пожалуйста, если вы можете мне помочь, или есть функция для вычисления сходства, как это, потому что я искал и ничего не нашел в этом конкретном случае
PS: Зная, что абзацы разделены запятой ,
Комментарии:
1. Для такого конкретного расчета не существует предопределенных функций. Вы можете определить свою единственную функцию и выполнить итерацию по строкам фрейма данных вручную. Для сравнения двух строк
.split(',')
можно использовать функцию python.
Ответ №1:
Вы можете использовать функции встроенных функций spark array_intersect,size,split,concat_ws
.
Example:
df.show()
# ------------ ------------
#| Col1| Col2|
# ------------ ------------
#| ABCD,MGF|ABCD,AADD,SC|
#|ABCD,AABD,CV|ABCD,CV,DDXF|
# ------------ ------------
df.withColumn("Similarity",concat_ws("/",size(array_intersect(split(col("col1"),","),split(col("col2"),","))),size(split(col("col2"),",")))).show()
# ------------ ------------ ----------
#| Col1| Col2|Similarity|
# ------------ ------------ ----------
#| ABCD,MGF|ABCD,AADD,SC| 1/3|
#|ABCD,AABD,CV|ABCD,CV,DDXF| 2/3|
# ------------ ------------ ----------