Я пытаюсь реализовать подсчет слов, используя MapReduce PySpark. Я хотел бы посчитать, сколько раз пара слов появляется в строке текста.
Например, если бы у меня было предложение: черная собака преследовала черный шар.
Вывод может быть ('a', 'black'): 2, потому что 'black' встречается дважды в строке с 'a'.
У меня есть следующий код, который подсчитывает количество раз, когда одно словопроисходит, но я борюсь с тем, как считать в парах:
text_file = sc.textFile("filepath")
import re, string
string.punctuation
punc = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
def uni_to_clean_str(x):
converted = x.encode('utf-8')
lowercased_str = converted.lower()
lowercased_str = lowercased_str.replace('--',' ')
clean_str = lowercased_str.translate(None, punc)
return clean_str
one_RDD = text_file.flatMap(lambda x:uni_to_clean_str(x).split())
one_RDD = one_RDD.map(lambda x: (x,1))
one_RDD = one_RDD.reduceByKey(lambda x,y: x + y)
one_RDD.saveAsTextFile("filepath")
Если бы я использовал пример предложения, это вернуло бы: ('a', 1) и т. д.
Любая помощь будет принята с благодарностью. Большое спасибо!