Создание столбца оценок во фрейме данных Pyspark с помощью пакета jellyfish

У меня есть такой фрейм данных

df = [id1, id2, name1, name2, address1, address2, DOB1, DOB2]

Я хотел бы получить оценку Jaro_winkler (в новом столбце) для столбцов column1 и column2 в фрейме данных Pyspark. Я пытаюсь использовать пакет Python jellyfish.

Спасибо


person Muns    schedule 12.05.2020    source источник


Ответы (1)


Этот ответ в основном связан с просмотром аналогичного вопроса в StackOverflow здесь. В своем примере они исследуют, как можно справиться с нулевыми значениями при запуске сравнения строк медузы.

Вы захотите настроить вызов UDF, чтобы использовать возможности параллельной обработки pyspark. См. Код ниже:

from pyspark.sql.functions import udf
from pyspark.sql.functions import col
from pyspark.sql.types import DoubleType
import jellyfish

# initiate user defined function (UDF) call.
@udf(DoubleType())
def jaro_winkler(s1, s2):
    return jellyfish.jaro_winkler(s1, s2)

# to create a new column
df = df.withColumn('new_column',jaro_winkler(col('column1'),col('column2')))

# to show top 20 results
df.select('new_column').show()

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

@udf(DoubleType())
def jaro_winkler(s1, s2):
    if s1 is None or s2 is None:
        out = 0
    else: 
        out = jellyfish.jaro_winkler(s1, s2)
    return out
person PJ Gibson    schedule 26.02.2021