сходство между двумя строками в фрейме данных Pyspark

#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|
# ------------ ------------ ----------