Я могу помочь с частью pyspark. Лучше избегать использования udf, всегда есть эквивалентный способ сделать это с помощью функции inbuit. В вашем случае будет полезна функция столбца contains (). Обратитесь: https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=contain#pyspark. sql .Column.contains
Рассмотрим тестовый фрейм данных.
test_df= sqlContext.createDataFrame(["stay safe","lets make the world coronafree","corona spreads through contact","there is no vaccine yet for corona,but is in progress","community has to unite against corona."],"string").toDF('text')
test_df.show(truncate=False)
+-----------------------------------------------------+
|text |
+-----------------------------------------------------+
|stay safe |
|lets make the world coronafree |
|corona spreads through contact |
|there is no vaccine yet for corona,but is in progress|
|community has to unite against corona. |
+-----------------------------------------------------+
test_df_f = test_df.where(F.col('text').contains('corona'))
test_df_f.show()
+-----------------------------------------------------+
|text |
+-----------------------------------------------------+
|lets make the world coronafree |
|corona spreads through contact |
|there is no vaccine yet for corona,but is in progress|
|community has to unite against corona. |
+-----------------------------------------------------+
вы можете видеть, что все знаки препинания уже приняты во внимание . С помощью этого отфильтрованного фрейма данных, test_df_f, вы можете выполнить подсчет, чтобы напрямую получить количество строк или любое другое агрегирование по дате для дальнейшего анализа.
Если вам нужно сопоставить все слово, вы можете использовать это:
test_df_f_whole = test_df.where("text RLIKE '\\\\bcorona\\\\b'")
test_df_f_whole.show(truncate=False)
+-----------------------------------------------------+
|text |
+-----------------------------------------------------+
|corona spreads through contact |
|there is no vaccine yet for corona,but is in progress|
|community has to unite against corona. |
+-----------------------------------------------------+
Ссылка: https://html.developreference.com/article/12239248/How+to+use+word+boundary+in+RLIKE+in+PySpark+SQL+Dataframes