Пример кадра данных:
from pyspark.sql import functions as F
list=(['cult, horror, got'],
['violence'],
['they dream of some'],
['imdb'],
['inspiring, romantic'])
df=spark.createDataFrame(list,['tags'])
df.show()
+-------------------+
| tags|
+-------------------+
| cult, horror, got|
| violence|
| they dream of some|
| imdb|
|inspiring, romantic|
+-------------------+
Будет работать с Spark2.4 +:
Ваш список слов будет помещен в новый столбец для каждой строки, чтобы мы могли использовать array_intersect на две колонки. Чтобы поместить теги в форму массива, мне пришлось удалить ',' и разделить на ''. Затем мы можем сделать array_intersect, чтобы получить точное совпадение.
list=['murder', 'violence', 'flashback', 'cult', 'revenge', 'romantic', 'comedy', 'psychedelic', 'suspenseful', 'train']
df.withColumn("words", F.array([F.lit(string) for string in list]))\
.withColumn("tags2", F.split(F.regexp_replace("tags", '\,',""),' '))\
.withColumn("toptags", F.array_intersect("tags2","words")[0])\
.drop("words","tags2").show()
+-------------------+--------+
| tags| toptags|
+-------------------+--------+
| cult, horror, got| cult|
| violence|violence|
| they dream of some| null|
| imdb| null|
|inspiring, romantic|romantic|
+-------------------+--------+
Кроме того, если вы хотите получить как все совпадения топтага, а не только первое совпадение, удалите [0] после array_intersect, чтобы получить массив все матчи.