У меня есть DataFrame, содержащий столбец со строками. Я хочу найти похожие строки и пометить их флажком. Я использую функцию ratio из модуля python-Levenshtein и хотите пометить строки с коэффициентом выше 0,90 как «похожие». Ниже приведен пример имеющегося у меня DataFrame:
sentenceDataFrame = spark.createDataFrame([
(0, "Hi I heard about Spark"),
(1, "I wish Java could use case classes"),
(2, "Logistic,regression,models,are,neat"),
(3, "Logistic,regression,model,are,neat")
], ["id", "sentence"])
Желаемый результат:
+---+-----------------------------------+------------+
|id |sentence |similar_flag|
+---+-----------------------------------+------------+
|0 |Hi I heard about Spark | |
|1 |I wish Java could use case classes | |
|2 |Logistic regression models are neat|2_0 |
|3 |Logistic regression model is neat |2_1 |
|4 |Logistics regression model are neat|2_2 |
+---+-----------------------------------+------------+
Где «2_1» означает, что «2» - это «идентификатор» ссылочной строки (первая уникальная строка, используемая для сопоставления), а «1» представляет первую строку, которая соответствует ей. Я хочу полностью избежать циклов for. Для небольших данных я использовал цикл for для достижения желаемого результата в простом питоне и хочу получить такие же результаты в PySpark, поэтому я не хочу использовать какой-либо другой модуль, кроме python-Levenshtein. Я столкнулся с этим, но он требует, чтобы я отказался от модуля python-Levenshtein. Кроме того, мой DataFrame, вероятно, будет огромным (и ожидается, что он будет расти каждый день), поэтому этот подход может вызвать ошибки памяти. Есть ли лучший способ добиться желаемого результата?