Изменить текстовый файл, прочитанный Spark - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь считать слова в нескольких текстовых файлах в кластере Hadoop при использовании Spark.Мне удается получить количество слов, но я также хочу сделать некоторые дальнейшие изменения, такие как игнорирование чисел или преобразование всех слов в нижний регистр.Я не могу перебирать RDD-данные в обычном режиме.Я пытался использовать collect (), но функция map не принимает список в качестве аргумента.Я также пытался применить логику регулярных выражений непосредственно к функции «фильтра» в RDD, но безуспешно.Это код, который я дошел до этого, он работает без частей, которые я закомментировал.

from pyspark import SparkConf, SparkContext
import re
conf = SparkConf().setAppName("Word count")
sc = SparkContext(conf=conf)
sc.setLogLevel("WARN")
text = sc.textFile("/data/book/*.txt") \
       .flatMap(lambda line: line.split())

#handledText = text.map(lambda s: s.replace("\d", "", text))
counts = text.map(lambda word: (word, 1)) \
         .groupByKey() \
         .map(lambda p: (p[0], sum(p[1])))
res = counts.takeOrdered(text.count(), key=lambda p: -p[1])
print(res)

1 Ответ

0 голосов
/ 07 декабря 2018

text.map(lambda s: s.replace("\d", "", text))

Вы путаете встроенную функцию map() в Python с DataFrame.map() Spark ... Нет, параметр text там недопустим,

Попробуйте это

def lower_no_digit(word):
    return lower(word.replace(r'\d+', ''))

counts = text.map(lower_no_digit) \ 
             .filter(lambda w : len(w) > 0) \
             .map(lambda word: (word, 1)) \

, который отображает функцию по словам и отфильтровывает пустые перед применением (word, 1)

В сторону - Выполнението же самое в SparkSQL несколько проще и не требует ручного ввода (word, 1)

Я пытался использовать collect ()

Do map(lambda x : ... , df.collect()).Это приведет все данные к локальному драйверу Spark и не позволит запустить среду распределенной обработки .

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