如何在 pyspark 中的数据帧上使用 fuzz.ratio
Posted
技术标签:
【中文标题】如何在 pyspark 中的数据帧上使用 fuzz.ratio【英文标题】:How to use fuzz.ratio on a data frame on pyspark 【发布时间】:2020-06-30 09:30:29 【问题描述】:我想在数据框上使用 fuzz.ratio,但我正在使用 pyspark(我不能使用 pandas)。
我有这个功能:
from fuzzywuzzy import fuzz
我创建一个这样的数据框:
communes_corrompues=spark.createDataFrame(
[("VILLEAINTE", "VILLEPINTE"),
('QILLEPINTE' ,'VILLEPINTE'),
('AHIENS' ,'AMIENS'),
('AMIEPS' ,'AMIENS'),
("CVRGY" ,"CERGY"),
("CERGA" ,"CERGY")
],
['corrompue', 'resultat']
)
而这句话不行:
communes_corrompues_ratio = communes_corrompues.withColumn("fuzzywuzzy_ratio",
lit(fuzz.ratio(col("resultat"),col("corrompue"))))
我有这个错误:
ValueError: 无法将列转换为布尔值:请使用 '&' '和','|' for 'or', '~' for 'not' when building DataFrame boolean 表达式。
有人可以帮助我吗?或者知道怎么做?
【问题讨论】:
【参考方案1】:我会为此尝试用户定义的函数,例如:
from pyspark.sql.functions import udf
from fuzzywuzzy import fuzz
@udf("int")
def fuzz_udf(a,b):
return fuzz.ratio(a,b)
communes_corrompues_ratio.withColumn("fuzzywuzzy_ratio", fuzz_udf(col("resultat"),col("corrompue")).show()
【讨论】:
谢谢,成功了!我只是将 '' @udf("float")" 更改为 "@udf("int")"。以上是关于如何在 pyspark 中的数据帧上使用 fuzz.ratio的主要内容,如果未能解决你的问题,请参考以下文章