text_data = [
(1, "I hav a dreem that one day"),
(2, "Ths is a test of the emergncy broadcast systm"),
(3, "Speling errors are commn in som text"),
]
text_df = spark.createDataFrame(text_data, "id: int, article: string")
И кадр данных сопоставлений неправильных и правильных.
Я пытался найти количество неправильных слов в статьях, учитывая, что все неправильные слова были указаны в сопоставлении. Я сделал это двумя способами: один использовал левое соединение и группировку, а другой — функции более высокого порядка. Это код.
Использование объединения и группировки по для определения количества неправильных и правильных слов.
Какому из них следует отдать предпочтение, когда размер статьи или отображения увеличивается? (Я предполагаю, что лучше использовать первый вариант, потому что если размер карты увеличится, то будет сложно разместить всю карту в каждой строке)
Предположим, у меня есть следующий фрейм данных статей. [code]text_data = [ (1, "I hav a dreem that one day"), (2, "Ths is a test of the emergncy broadcast systm"), (3, "Speling errors are commn in som text"), ] text_df = spark.createDataFrame(text_data, "id: int, article: string") [/code] И кадр данных сопоставлений неправильных и правильных. [code]dict_data = [ ("hav", "have"), ("dreem", "dream"), ("Ths", "This"), ("emergncy", "emergency"), ("systm", "system"), ("Speling", "Spelling"), ("commn", "common"), ("som", "some"), ] dict_df = spark.createDataFrame(dict_data, "misspelled: string, correct: string") [/code] Я пытался найти количество неправильных слов в статьях, учитывая, что все неправильные слова были указаны в сопоставлении. Я сделал это двумя способами: один использовал левое соединение и группировку, а другой — функции более высокого порядка. Это код. [list] [*]Использование объединения и группировки по для определения количества неправильных и правильных слов. [/list] [code]( text_df .select( "id" , F.explode(F.split(F.col("article"), " ")).alias("word") ) .join( dict_df , F.col('word') == dict_df['misspelled'] , 'left' ) .select( "id" , "word" , dict_df['correct'] ) .groupBy("id") .agg( F.count(F.col('word')).alias('Total') , F.count(F.when(F.col('correct').isNull(), 'isCorrect')).alias('Correct') , F.count(F.col('correct')).alias('Incorrect') ) .show() )
''' Output +---+-----+---------+-------+ | id|Total|Incorrect|Correct| +---+-----+---------+-------+ | 1| 7| 2| 5| | 2| 9| 3| 6| | 3| 7| 3| 4| +---+-----+---------+-------+ ''' [/code] У меня два вопроса: [list] [*]Какой из них будет быстрее другого [*]Какому из них следует отдать предпочтение, когда размер статьи или отображения увеличивается? (Я предполагаю, что лучше использовать первый вариант, потому что если размер карты увеличится, то будет сложно разместить всю карту в каждой строке) [/list]