Quadros de dados Spark (scala) - Verifique se as strings na coluna contêm itens de um conjunto

Eu sou muito novo no scala and spark e tenho tentado encontrar uma solução para esse problema o dia todo - isso está me afetando. Tentei 20 variações diferentes do código a seguir e continuo recebendotype mismatch erros quando tento executar cálculos em uma coluna.

Eu tenho um spark dataframe e desejo verificar se cada string em uma coluna específica contém algum número de palavras de uma predefiniçãoList (ouSet) de palavras.

Aqui estão alguns dados de exemplo para replicação:

// sample data frame
val df = Seq(
      (1, "foo"),
      (2, "barrio"),
      (3, "gitten"),
      (4, "baa")).toDF("id", "words")

// dictionary Set of words to check 
val dict = Set("foo","bar","baaad")

Agora, estou tentando criar uma terceira coluna com os resultados de uma comparação para ver se as strings no$"words" coluna dentro deles contém qualquer uma das palavras nodict Conjunto de palavras. Portanto, o resultado deve ser:

+---+-----------+-------------+
| id|      words|   word_check| 
+---+-----------+-------------+
|  1|        foo|         true|     
|  2|      bario|         true|
|  3|     gitten|        false|
|  4|        baa|        false|
+---+-----------+-------------+

Primeiro, tentei ver se eu poderia fazê-lo nativamente sem usar UDFs, pois o dict Set será realmente um grande dicionário de> 40K palavras e, pelo que entendi, isso seria mais eficiente que um UDF:

df.withColumn("word_check", dict.exists(d => $"words".contains(d)))

Mas eu recebo o erro:

type mismatch;
found   : org.apache.spark.sql.Column
required: Boolean

Eu também tentei criar uma UDF para fazer isso (usando os doismutable.Set emutable.WrappedArray para descrever o conjunto - não tenho certeza do que está correto, mas também não funciona):

val checker: ((String, scala.collection.mutable.Set[String]) => Boolean) = (col: String, array: scala.collection.mutable.Set[String] ) =>  array.exists(d => col.contains(d))

val udf1 = udf(checker)

df.withColumn("word_check", udf1($"words", dict )).show()

Mas obtenha outro tipo de incompatibilidade:

 found   : scala.collection.immutable.Set[String]
 required: org.apache.spark.sql.Column

Se o conjunto fosse um número fixo, eu poderia usarLit(Int) na expressão? Mas eu realmente não entendo executar funções mais complexas em uma coluna, misturando diferentes tipos de dados trabalha no scala.

Qualquer ajuda muito apreciada, especialmente se puder ser feita com eficiência (é um df grande de> 5m de linhas).

questionAnswers(3)

yourAnswerToTheQuestion