Я только что начал с pySpark, и я пытаюсь найти количество слов для каждого алфавита из текстового файла. Я рассматриваю только неуникальные ценности. Я мог найти количество каждого слова, но не мог идти дальше.
data = sc.textFile("file.txt")
words = data.flatMap(lambda l : re.split(r'[^A-Za-z\t]+', l))
pairs = words.map(lambda w : (w, 1))
counts = pairs.reduceByKey(lambda n1, n2 : n1+n2)
print(counts.top(10))
Это дает вывод как [('zwagger', 1), ('zounds', 2), ('zone', 1), ('zodiacs', 1), ('zodiac', 1), ('zo', 1), ('zir', 2), ('zipped', 1), ('zip', 1), ('zephyrs', 1)]
Но я ищу количество слов для каждого алфавита. Я пытался использовать цикл for, но получаю ошибку TypeError: 'PipelinedRDD' object is not iterable
. Я пытался применить groupBy
grouped = counts.groupBy(lambda x : x[0][0])
print(grouped.top(10))
но это бросает IndexError: string index out of range
, что странно. Я не уверен, что делать дальше.