Python 使用PySpark中的Levenshtein距离实现两列之间的字符串匹配函数

Python 使用PySpark中的Levenshtein距离实现两列之间的字符串匹配函数,python,dataframe,apache-spark,pyspark,levenshtein-distance,Python,Dataframe,Apache Spark,Pyspark,Levenshtein Distance,我试图通过将名称对之间的levenshtein距离转换为匹配系数来比较名称对,例如: coef=1-列文斯坦(str1,str2)/max(长度(str1),长度(str2)) 但是,当我在PySpark中使用withColumn()实现它时,在计算max()函数时会出现错误。numpy.max和pyspark.sql.functions.max都会抛出错误。有什么想法吗 从pyspark.sql.functions导入col、length、levenshtein valuesA=[('Pira

我试图通过将名称对之间的levenshtein距离转换为匹配系数来比较名称对,例如:

coef=1-列文斯坦(str1,str2)/max(长度(str1),长度(str2))

但是,当我在PySpark中使用withColumn()实现它时,在计算max()函数时会出现错误。numpy.max和pyspark.sql.functions.max都会抛出错误。有什么想法吗

从pyspark.sql.functions导入col、length、levenshtein
valuesA=[('Pirate',1),('Monkey',2),('Ninja',3),('Spaghetti',4)]
TableA=spark.createDataFrame(valuesA,['firstname','id']
test_compare=TableA.WithColumnRename('firstname','firstname2')。WithColumnRename('id','id2')。交叉连接(TableA)
测试比较。与列(“距离”\u firstname)、levenshtein('firstname','firstname2')/max(长度(col('firstname'))、长度(col('firstname2')))

max
是一个聚合函数,用于在要使用的两个值之间找到最大值,也可以从
pyspark.sql.functions

from pyspark.sql.functions import col, length, greatest
from pyspark.sql.functions import levenshtein  
valuesA = [('Pirate',1),('Monkey',2),('Ninja',3),('Spaghetti',4)]
TableA = spark.createDataFrame(valuesA,['firstname','id'])

test_compare = TableA.withColumnRenamed('firstname', 'firstname2').withColumnRenamed('id', 'id2').crossJoin(TableA)
test_compare.withColumn("distance_firstname", levenshtein('firstname', 'firstname2') / greatest(length(col('firstname')), length(col('firstname2')))).show()

您好,您应该包括错误消息。我还注意到您有一个名为length的函数;您也应该包括它,因为它在max()调用中。让python计算你的长度;您可以使用内置的len(),但这可能不符合您的目的。