Pyspark - Как использовать функцию с двумя аргументами из моего rdd - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующая функция, которая сравнивает две строки одинаковой длины и вычисляет их коэффициент соответствия (сходство между строками). Функция выглядит следующим образом:

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

Теперь предположим, у меня есть СДР следующим образом:

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

Я хочу использовать свою функцию SMC для формирования нового СДР, который формируется из значений, которые функция SMC возвращает, когда она применяется к каждой паре. Например, когда пара ('abc','adc') входит в функцию SMC, она возвращает значение 0.66. Мой ожидаемый вывод RDD2 будет следующим:

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

Как я могу написать функцию карты для этого и как я могу передать требуемые аргументы своей функции. Большое спасибо

1 Ответ

1 голос
/ 12 марта 2020

Вам просто нужно использовать функцию map следующим образом:

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

, которая дает

[0.6666666666666666, 0.3333333333333333, 1.0]

Обратите внимание, что для того, чтобы ваша функция работала, я приведу счет в плавающее число в ответе: return float(count)/len(str1)

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