Вы можете просто определить следующий UDF:
val myUDF = udf { (a : Seq[String], b : Seq[Int]) =>
a.zip(b).filter(_._2 != 0).map(_._1)
}
Он объединяет массивы и фильтры на основе целочисленных значений.
df.select(myUDF($"words", $"numbers").as("words")).show
Возвращает соответствующие слова в массиве
+-----------------+
| words|
+-----------------+
|[there, everyone]|
+-----------------+
Если вы хотите, чтобы каждое слово находилось в отдельной строке, вы можете использовать explode
:
df.select(explode(myUDF($"words", $"numbers")).as("words")).show
, что приводит к
+--------+
| words|
+--------+
| there|
|everyone|
+--------+