Я делаю подсчет слов в PySpark, где одна из задач, которые мне нужно решить, - показать все представления одного слова (например, apple, Apple, aPPLe и т. Д. c.)
* 1002. * В настоящее время мой код показывает только версию слова в нижнем регистре, но он учитывает все представления. Я знаю, что это потому, что в начале я поместил все слова в текстовом файле в нижний регистр, но я не уверен, как его изменить, чтобы мои wordReps показывали все представления.
hussle = sc.textFile("SOME_TEXT_FILE")
def removePunc(x):
bars = x.encode('utf-8')
lowerBars = bars.lower()
cleanBars = lowerBars.translate(None, string.punctuation)
return cleanBars
words = hussle.flatMap(lambda x: removePunc(x).split())
total_words = words.count()
wordCount = words.map(lambda x: (x,1)).reduceByKey(lambda x,y: x + y).map(lambda x:(x[0],x[1],x[1]/float(total_words))).sortByKey(False)
wordReps = words.map(lambda word: (word.lower(), word)).reduceByKey(lambda word1, word2: word1 + " " + word2 if word2 not in word1 else word1)
wordsFinal = wordCount.join(wordReps)
Мой ожидаемый результат должен быть примерно таким:
'all' (4, 'all All aLL')
, а я получаю:
'all' (4, 'all')