У меня есть датафрейм Spark со следующей структурой. BodyText_token имеет токены (обработано/набор слов). И у меня есть вложенный список определенных ключевых слов
root
|-- id: string (nullable = true)
|-- body: string (nullable = true)
|-- bodyText_token: array (nullable = true)
keyword_list=['union','workers','strike','pay','rally','free','immigration',],
['farmer','plants','fruits','workers'],['outside','field','party','clothes','fashions']]
Мне нужно было проверить, сколько токенов попадает под каждый список ключевых слов, и добавить результат в виде нового столбца существующего фрейма данных.
Например: если tokens =["become", "farmer","rally","workers","student"]
результат будет → [1,2,0]
Следующая функция работала как ожидалось.
def label_maker_topic(tokens,topic_words):
twt_list = []
for i in range(0, len(topic_words)):
count = 0
#print(topic_words[i])
for tkn in tokens:
if tkn in topic_words[i]:
count += 1
twt_list.append(count)
return twt_list
Я использовал udf в withColumn для доступа к функции и получаю сообщение об ошибке. Я думаю о передаче внешнего списка в udf. Можно ли как-то передать внешний список и столбец datafram в udf и добавить новый столбец в мой dataframe?
topicWord = udf(label_maker_topic,StringType())
myDF=myDF.withColumn("topic_word_count",topicWord(myDF.bodyText_token,keyword_list))