将函数应用于笛卡尔RDD

Sot*_*tos 1 scala levenshtein-distance apache-spark rdd

我正在尝试将函数应用于笛卡尔RDD.该功能取自此处,我不知道如何使其适用于笛卡尔RDD.

val combined = rdd_valid.cartesian(rdd1)
combined.collect().foreach(a  => println(a))

(abcde,abdce)
(somethin,somthing)
(afghr, decsvt)
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是做

val newRDD = combined.map(Levenshtein.distance)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Tza*_*har 5

假设combined有类型RDD[(String, String)],并Levenshtein.distance有此签名:

def distance(s1:String, s2:String)
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式申请:

val newRDD = combined.map { case (s1, s2) => Levenshtein.distance(s1, s2) }
Run Code Online (Sandbox Code Playgroud)

或者,或者:

val newRDD = combined.map(t => Levenshtein.distance(t._1, t._2))
Run Code Online (Sandbox Code Playgroud)