Уменьшить функцию в pyspark вычисления сходства двух предложений по jaccard - PullRequest
0 голосов
/ 09 марта 2020

Я должен взять два предложения сходства после сокращения.

Предыдущая группа шагов по префиксу выполнена, ввод :

<<strong> ключ (префикс), значение (RID, предложение) >

показано как:

[('w11293',0,
   ['w11293',
   'w11297',
   'w10522',
   'w11264',
   'w9820',
   'w11297',
   'w11117',
   'w11296',
   'w11297',
   'w11186']),
 ('w11297',
  0,
  ['w11293',
   'w11297',
   'w10522',
   'w11264',
   'w9820',
   'w11297',
   'w11117',
   'w11296',
   'w11297',
   'w11186']),
 ('w10522',
  0,
  ['w11293',
   'w11297',
   'w10522',
   'w11264',
   'w9820',
   'w11297',
   'w11117',
   'w11296',
   'w11297',
   'w11186']),
 ('w11296',
  1,
  ['w11296',
   'w11297',
   'w11186',
   'w11271',
   'w11044',
   'w9079',
   'w11296',
   'w9277',
   'w11296',
   'w10783',
   'w11271',
   'w11258',
   'w11297',
   'w11087',
   'w11295',
   'w11297',
   'w10356',
   'w11296',
   'w11297',
   'w11042',
   'w11295',
   'w11264',
   'w10416',
   'w11258',
   'w11297',
   'w11087',
   'w11295',
   'w11297',
   'w11010']),
 ('w11297',
  1,
  ['w11296',
   'w11297',
   'w11186',
   'w11271',
   'w11044',
   'w9079',
   'w11296',
   'w9277',
   'w11296',
   'w10783',
   'w11271',
   'w11258',
   'w11297',
   'w11087',
   'w11295',
   'w11297',
   'w10356',
   'w11296',
   'w11297',
   'w11042',
   'w11295',
   'w11264',
   'w10416',
   'w11258',
   'w11297',
   'w11087',
   'w11295',
   'w11297',
   'w11010'])]

Выход должен быть :

(префикс RID1. RID2, сходство)

как использовать функцию reduceByKey() или reduce() получить сходство в pyspark?


Мы опробовали reduceByKey() функцию следующим образом:

BasicKernel = prefix_filtered_rdd.reduceByKey(lambda x, y: Jaccard(x[1], y[1]))

Jaccard разработан следующим образом:

def Jaccard(x, y):
    x_list = x[1]
    y_list = y[1]
    overlap_number  = [word for word in x_list if word in y_list ]
    simliarity = len(overlap_number)/(len(x_list) + len(y_list) - len(overlap_number))
    return (x[0], y[0], simliarity)

, но возвращаемая ошибка отображается как: TypeError: 'int' object is not iterable

Имеется очевидное неправильное использование грамматики, но у меня есть нет идеи о том, как спроектировать эту функцию уменьшения сходства, если у вас есть идеи о том, как решить эту проблему, пожалуйста, поделитесь ей, большое спасибо.

Мы пытаемся выполнить эту работу: https://github.com/TonyApuzzo/fuzzyjoin также отображается как https://github.com/wjcquking/fuzzyjoin-hadop/tree/master/fuzzyjoin-hadoop

...