我有一个名为X的spark数据框。X是一个字符串列,其中包含用','分隔的值的列表。另外,我有一个值数组,可以称其为Y。我试图做的是过滤我的数据框,其中用','分割后的X中的值位于Y中。我的最终数据框应包含其中不包含任何值的行X匹配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.
有更好的方法吗?
谢谢