Если у вас нет 2.4, вам нужно использовать udf ().Проверьте это:
val df = Seq(Array("A", "B", "C", "D"), Array("E", "B", "C", "D")).toDF("skills")
def skill_check(x:Seq[String]):Boolean = {
val b = x.map( p=> Seq("A", "Z").exists( y => y==p)).filter(x=>x)
if ( b.isEmpty ) false else true
}
val udf_skill_check = udf( skill_check(_:Seq[String]))
df.withColumn("check",udf_skill_check('skills) ).filter("check").show(false)
Результаты:
+------------+-----+
|skills |check|
+------------+-----+
|[A, B, C, D]|true |
+------------+-----+
Если вы не хотите использовать UDF, вы можете ввести новый столбец для контрольного списка, то есть ["A", "Z"}, взорваться .. затем проверить, содержит ли навык взорванные предметы, отфильтровать и затем удалить дубликаты в столбце умений.Карусель, но работает
val df = Seq(Array("A", "B", "C", "D"), Array("E", "B", "C", "D")).toDF("skills")
val df2 = df.withColumn("chk1",lit(Array("A","Z"))) // New column
df2.withColumn("chk2",explode('chk1)).withColumn("chk3", array_contains('skills,'chk2)).filter("chk3").select("skills").dropDuplicates().show(false)
+------------+
|skills |
+------------+
|[A, B, C, D]|
+------------+