2016-06-29 2 views
1

У меня есть текстовый файл и вам нужно фильтровать строки, содержащие более 6 слов. Я создаю RDD:Объединить слова в строки

my_data = sc.textFile("lines.txt") 

Тогда я разделить каждую строку в словах:

line_words = my_data.map(lambda x: x.split(' ')) 

и применить фильтр и сохранить результаты в файл:

filtered_lines = line_words.filter(lambda x: len(x) > 6) 
filtered_lines.saveAsTextFile("out") 

И из исходного файла:

hello world 
its fun to have fun but you have to know how 

я получаю:

[u'its', u'fun', u'to', u'have', u'fun', u'but', u'you', u'have', u'to', u'know', u'how'] 

Как я комбинировать слова обратно в линию без скобок и u''?

Я знаю, что лучше сделать что-то вроде этого:

my_data.filter(lambda x: len(x.split(' ')) > 6).saveAsTextFile("out") 

Но я хочу, чтобы узнать, как сделать результаты читаемым для человека.

ответ

1

Вы можете использовать строки .join функцию (массива) для преобразования элементов массива в строку, где строка является разделителем:

line = [u'its', u'fun', u'to', u'have', u'fun', u'but', u'you', u'have', u'to', u'know', u'how'] 
sentence = " ".join(line) 

Это то, что вы имеете в виду?

+0

Я получаю TypeError при использовании 'предложение =" ".join (строка)', так как моя строка RDD – lacerated

+1

Sry, я новичок в программировании. Пытался использовать 'объединенный_line = filter_lines.map (lambda x:" ".join (x))' и он сработал! Думаю, нам нужно уменьшить функцию здесь, которая объединяет 2 слова вместе – lacerated

1

Не могли бы вы сэкономить какую-то обработку, вообще пропустив раскол? Вы считаете только количество слов для фильтра (например, количество пробелов в строке).

В качестве альтернативы вы можете использовать фильтр разделения и> 6 на том же шаге фильтра. Поскольку вы не используете отдельные слова, нет необходимости хранить эту структуру данных.

+0

Я мог бы это сделать. Вот почему я написал однострочное решение в конце, но моя цель - научиться совмещать результаты, чтобы позже использовать более сложные задачи. – lacerated

Смежные вопросы