【问题标题】:similarity between two strings in a Pyspark DataframePyspark Dataframe 中两个字符串之间的相似性
【发布时间】:2021-09-27 15:07:21
【问题描述】:

我正在尝试计算数据框中两个字符串之间的相似度,所以我搜索并找到了 levehstein distance 这对我没有帮助。

在我的例子中,字符串用逗号分隔 , 所以我想计算两列之间的相似度,这里是一个例子:

如图所示,我想将 col 1 的字符串列表与 col2 中的字符串列表进行比较,并计算它们之间的相似性,如下所示:{ col1 中与 col2 中的段落匹配的段落数}/ {第 2 列的段落数} 所以请如果你能帮助我,或者有没有像这样计算相似度的函数,因为我已经搜索过并且没有找到关于这个特殊案例的任何内容

PS:知道段落之间用逗号分隔,

【问题讨论】:

  • 对于这种特定的计算,不存在预定义的函数。您可以定义一个函数并手动迭代数据框行。对于两个字符串的比较,可以使用python函数.split(',')。

标签: python apache-spark pyspark apache-spark-sql


【解决方案1】:

您可以使用 spark inbuilt 函数 array_intersect,size,split,concat_ws 函数。

Example:

df.show()
#+------------+------------+
#|        Col1|        Col2|
#+------------+------------+
#|    ABCD,MGF|ABCD,AADD,SC|
#|ABCD,AABD,CV|ABCD,CV,DDXF|
#+------------+------------+

df.withColumn("Similarity",concat_ws("/",size(array_intersect(split(col("col1"),","),split(col("col2"),","))),size(split(col("col2"),",")))).show()
#+------------+------------+----------+
#|        Col1|        Col2|Similarity|
#+------------+------------+----------+
#|    ABCD,MGF|ABCD,AADD,SC|       1/3|
#|ABCD,AABD,CV|ABCD,CV,DDXF|       2/3|
#+------------+------------+----------+

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2019-04-18
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2016-09-01
    • 2021-10-12
    相关资源
    最近更新 更多