Le passage d'un bloc de données de la colonne et de la liste externe à l'udf en vertu de withColumn

J'ai une Étincelle dataframe avec la structure suivante. Le bodyText_token a les jetons (traité/jeu de mots). Et j'ai une liste imbriquée de mots-clés définis

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']]

J'avais besoin de vérifier le nombre de jetons d'entrer dans chaque liste de mots clés et ajouter le résultat dans une nouvelle colonne de l'existant dataframe.
Par exemple: si tokens =["become", "farmer","rally","workers","student"]
le résultat sera -> [1,2,0]

La fonction suivante a fonctionné comme prévu.

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

J'ai utilisé de l'udf, en vertu de withColumn pour accéder à la fonction et j'obtiens une erreur. Je pense que c'est sur la transmission d'une liste externe à l'udf. Est il possible que je peux passer de la liste externe et la datafram colonne à une udf et ajouter une nouvelle colonne à mon dataframe?

topicWord = udf(label_maker_topic,StringType())
myDF=myDF.withColumn("topic_word_count",topicWord(myDF.bodyText_token,keyword_list))

OriginalL'auteur Jay | 2016-05-24