首页 > 解决方案 > 使用 jellyfish 包在 Pyspark 数据框中创建分数列

问题描述

我有一个这样的数据框

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

我想获得Pyspark DataFrame中 column1 和 column2 的 Jaro_winkler 分数(在新列中)。我正在尝试使用jellyfish python 包。

谢谢

标签: python-3.xpysparkduplicatesstring-matchingrecord-linkage

解决方案


此响应主要源于在此处查看 StackOverflow 中的类似问题。在他们的示例中,他们研究了在运行 jellyfish 字符串比较时如何处理空值。

您需要设置一个 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

推荐阅读