Парное сравнение элементов DataFrame - PullRequest
0 голосов
/ 08 мая 2019

Как выполнить попарно итерацию столбцов, чтобы найти сходства.

Для всех элементов из всех столбцов одного фрейма данных, для сравнения со всеми элементами из всех столбцовдругого фрейма данных.

Например:

df1 имеет два поля Имя и возраст

Имя, возраст"Аджай Малхотра", 28"Суджата Кришанан", 27"Мадхав Шанкар", 33

df2 имеет два поля: UserId и EmpId, eMail

"UserID", "Emp ID", "Email"--------------------------------------"Ajay.Malhotra", 100, "a.malt@nothing.com""Мадхав.Шанкар", 101, "м.шанкар""Sujata.Kris", 1001, "Kris.Suja@nothing.com"

Некоторый метод для получения значения соответствия может использовать жесткий код 0,73 в качестве примера

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

Как взять каждый столбец из df_1 и каждый столбец из df2 и передать его chekIfSame.Выводом может быть декартово произведение, подобное этому

Name, UserId, MatchValue--------------------------------------"Суджата Кришанан", Суджата.Крис, 0,85"Ajay Malhotra", Ajay.Malhotra, 0,98"Аджай Малхотра", Суджата.Крис, 0,07

1 Ответ

1 голос
/ 10 мая 2019

Два DataFrame для каждого цикла

Мы не сможем его зациклить. Но мы можем присоединиться и передать его в функцию

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

Для этого нам нужно иметь его в chekIfSame как UDF перед вышеуказанной операцией.

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...