Dataframe взрывают вид сбоку и сравнивают с массивом - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть спарк 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. 

Есть ли лучший способ сделать это?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...