数据框元素上的配对明智比较

时间:2019-05-08 15:19:52

标签: apache-spark apache-spark-sql

如何进行成对迭代列以查找相似性。

将一个数据框的所有列的所有元素与另一个数据框的所有列的所有元素进行比较。

例如:

df1有两个字段,名称和年龄

  

姓名,年龄
  “ Ajay Malhotra”,28岁
   “ Sujata Krishanan”,27岁,
  “ Madhav Shankar”,33

df2具有两个字段UserId和EmpId,电子邮件

  

“ UserID”,“ Emp ID”,“ Email”
  --------------------------------------
  “ Ajay.Malhotra”,100,“ a.malt@nothing.com”
  “ Madhav.Shankar”,101,“ m.shankar”
   “ Sujata.Kris”,1001,“ Kris.Suja@nothing.com”


提供匹配值的某些方法可以使用一些hardCode 0.73为例

def chekIfSame(leftString: String, rightString: String): Double = { // Some Logic ..Gives a MatchValue 0.73 }

如何获取df_1中的每个Colunms和df2中的每个Colunms并将其传递给chekIfSame。
输出可能是这样的笛卡尔积

  

Name,UserId,MatchValue
  --------------------------------------
   Sujata.Kris,“ Sujata Krishanan”,0.85
   “ Ajay Malhotra”,Ajay.Malhotra,0.98
    Sujata.Kris“ Ajay Malhotra”,0.07

1 个答案:

答案 0 :(得分:1)

Two DataFrame nested for Each Loop

我们将无法嵌套循环。 但是,我们可以将其加入并传递给函数

joined = leftDf.join(rightDf)
val joinedWithScore = joined.withColumn("simlarScore", chekIfSame( joined(ltColName) , joined(rtColName)))

为此,我们需要在进行上述操作之前将其与UDF放在chekIfSame中。

def checkSimilarity = udf((left:String,right:String):Double => { 
// Logic or hard code 0..73
0.73

}