apachespark在同一Dataframe中的两个字符串列之间创建具有模糊分数的新列

jfgube3f  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(483)

我试图在同一Dataframe的两列中计算模糊分数(最好是部分比率分数)。

| column1 | column2|
| -------- | -------------- |
| emmett holt| holt
| greenwald| christopher

它需要像这样:

| column1 | column2|partial_ratio|
| -------- | -------------- |-----------|
| emmett holt| holt|100|
| greenwald| christopher|22|
|schaefer|schaefer|100|

在这个网站上的另一个问题的帮助下,我完成了以下代码:

compare=pd.MultiIndex.from_product([ dataframe['column1'],dataframe ['column2'] ]).to_series()

def metrics (tup):
   return pd.Series([fuzz.partial_ratio(*tup)], ['partial_ratio'])

df['partial_ratio'] = df.apply(lambda x: fuzz.partial_ratio(x['original_title'], x['title']), axis=1)

但问题已经从返回以下错误通知的第一行代码开始:
无法将列转换为bool:在生成Dataframe布尔表达式时,请使用“&”表示“and”,使用“|”表示“or”,使用“~”表示“not”。
你可以说我有点困在这里,所以任何关于这方面的建议都是非常感谢的!

oymdgrw7

oymdgrw71#

使用fuzzyfuzzy需要自定义项:

from fuzzywuzzy import fuzz
import pyspark.sql.functions as F

@F.udf
def fuzzyudf(original_title, title):
    return fuzz.partial_ratio(original_title, title)

df2 = df.withColumn('partial_ratio', fuzzyudf('column1', 'column2'))
df2.show()

+-----------+-----------+-------------+
|    column1|    column2|partial_ratio|
+-----------+-----------+-------------+
|emmett holt|       holt|          100|
|  greenwald|christopher|           22|
+-----------+-----------+-------------+

相关问题