Как получить список кортежей от freqDist в nltk


У меня есть фрейм данных с двумя столбцами id и text

Я хочу добавить новый столбец, содержащий количество слов для текста в строке.

Я создаю userdefinedFunction, в которой я реализую word_tokenizer и freqDict из nltk

word = f.udf(lambda token: word_count)

def word_count(token):
    freq_dict = nltk.probability.FreqDist(token)
    return [(word, freq) for word, freq in freq_dict.most_common()]

df = df.withColumn('wordcount',word(nltk.word_tokenize(df['text']))

После tokenizer я звоню word_count и надеюсь получить список кортежей со словом и его freq. а сделать это в столбце

[[Ljava.lang.Object;@9b4c4d5, [Ljava.lang.Object;@6a5d7d39, ...
1 2

1 ответ:

Необходимо указать тип возвращаемого значения для UDF. Определите такую схему

schema = ArrayType(StructType([StructField("word",StringType(), True), StructField("freq",LongType(), True)]))

И измените udf на

f.udf(word_count, schema)