如何从数据框列中的字符串数组中提取特定值?

时间:2018-12-20 21:34:47

标签: scala apache-spark

我有一个包含两列(wordsnumbers)的数据框,因此在单词下我有一个字符串数组和数字,我有一个整数数组。

例如:

words: ["hello","there","Everyone"] and numbers: [0,4,5]

我希望能够得到数字中的整数不为0的单词。因此,在上述情况下,仅应返回“ there”和“ Everyone”。

我还是scala和spark的初学者,因此尝试了filter,但是如何进入数组呢?我该如何退还这些字呢?

like df.filter(col("numbers") != 0)

1 个答案:

答案 0 :(得分:2)

您可以简单地定义以下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|
+--------+