apache spark-Pyspark-如何使用一个带有两个参数的函数,这两个参数取自我的rdd


0

下面的函数比较两个相同长度的字符串并计算它们的匹配系数(字符串之间的相似性)。功能如下:

def SMC(str1,str2):
    count = 0
    for i in range (len(str1)):
        if (str1[i]==str2[i]):
            count+=1
    return count/len(str1)

现在假设,我有一个RDD,如下所示:

RDD= sc.parallelize([('abc','adc'),('fgh','bch'),('ast','ast')])

我想使用函数SMC来形成一个新的RDD,它是由函数SMC在应用到每对函数时返回的值构成的。例如,当对('abc','adc')进入函数SMC时,它返回值0.66。我的预期产出RDD2如下:

>>> RDD2.collect()
    [0.666,0.333,1.0]

如何为此编写 map函数,以及如何将所需参数传递给函数。非常感谢

1 答案


0

你只需要像这样使用map函数:

RDD2 = RDD.map(lambda x: SMC(x[0], x[1]))
RDD2.collect()

会产生

[0.6666666666666666, 0.3333333333333333, 1.0]

注意,为了让函数 job,我将count transformation为一个浮点数:return float(count)/len(str1)


我来回答

写文章

提问题

面试题