У меня есть спарк Dataframe со столбцом под названием X. X - это строковый столбец, содержащий список значений, разделенных ','.Кроме того, у меня есть массив значений, назовем его Y. То, что я пытаюсь сделать, это отфильтровать мой Dataframe, где значения в X после разделения на ',' находятся в Y. Мой окончательный фрейм данных должен содержать строки, где ни одно из значений вX match Y.
Ниже приведен код, который я пытаюсь выполнить, но он слишком медленный для моего набора данных.
val arrayMatches = udf { (a: mutable.WrappedArray[String],
b: mutable.WrappedArray[String]) =>
a.intersect(b).nonEmpty
}
def asLitArray[T](xs: Seq[T]) = array(xs map lit: _*)
val col1 = col("X") // Column containing string values separated by "," ex: "abc,def,ghi,jkl"
// Y is array of string values like "abc, def, ghi". Size of Y is around 200k
val condition = !col1.isNull || !arrayMatches(split(col1, ","), asLitArray(Y))
val resultDF = myDataDF.filter(condition)
resultDF.count() // --> This step take ages.
Есть ли лучший способ сделать это?
Спасибо