вопрос инструмента искры grep - PullRequest
0 голосов
/ 17 апреля 2019

Я пишу инструмент grep в pyspark, который берет слово в командной строке, ищет текстовый файл и возвращает любую строку, содержащую слово, данное в командной строке.Мой поиск возвращает строки, которые не являются поисковым словом

#!/usr/bin/python

    import sys
    from pyspark import SparkContext

    def search_word(word):
            if (word)  != -1:
                    print ('%s\t%s' % ( word, word.strip() ))



    # assign search word given on command line
    if len(sys.argv) > 1:
           word = sys.argv[1]


         sc = SparkContext()
         textRDD = sc.textFile("input.txt")
         textRDD = textRDD.map(lambda word: word.replace(',',' ').replace('.',' '). lower())
         textRDD = textRDD.flatMap(lambda word: word.split())
         textRDD = textRDD.filter(lambda word: search_word(word))
         firstten = textRDD.take(10)
         print(firstten)

пример командной строки: spark-submitself

пример текстового файла:

Ere quitting, for the nonce, the Sperm Whale's head, I would have
you, as a sensible physiologist, simply--particularly remark its front
aspect, in all its compacted collectedness. I would have you investigate
it now with the sole view of forming to yourself some unexaggerated,
intelligent estimate of whatever battering-ram power may be lodged
there. Here is a vital point; for you must either satisfactorily settle
this matter with yourself, or for ever remain an infidel as to one of
the most appalling, but not the less true events, perhaps anywhere to be found in all recorded history.

ожидаемый результат:

yourself --  it now with the sole view of forming to yourself some unexaggerated

Код выше возвращает это:

produce produce
our our
new new
ebooks  ebooks

1 Ответ

0 голосов
/ 20 апреля 2019

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

Здесь, подход единого значения grep и только несколько строк кода:

import pyspark.sql.functions as f
df = spark.read.text("/FileStore/tables/sample_text.txt").toDF("text_string")
df.show(100, truncate=False)
grep_val = 'ZZZ'
df.where(df.text_string.contains(grep_val)).show(100, truncate=False)

возвращается:

+-------------------------+
|text_string              |
+-------------------------+
|Hi how are you today ZZZ |
|I am fine                |
|I am also tired          |
|You look good            |
|Can I stay with you?     |
|Bob will pop in later ZZZ|
|Oh really? Nice, cool    |
+-------------------------+

+-------------------------+
|text_string              |
+-------------------------+
|Hi how are you today ZZZ |
|Bob will pop in later ZZZ|
+-------------------------+

Вы бы лучше следовали стандартному подходу, используя grep_list, rlike и JOIN. См. PySpark: поиск подстрок в текстовом и подмножестве фрейма данных для более общих указаний общего руководства.

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