从 Spark 中的元素获取 Seq 索引 Sql

Get Seq index from element in Spark Sql

我有一个如下所示的数据框:

---------------------+------------------------
text                 | featured_text
---------------------+------------------------
sun                  | [type, move, sun]
---------------------+------------------------

我想搜索 "featured_text" 数组中的 "text" 列值并获取 "text" 值的索引(如果存在)。在上面的示例中,我想在数组 [type, move, sun] 中搜索 "sun",结果将是“2”(索引)。

是否有任何 spark sql function/scala 函数可用于从元素中获取索引?

据我所知,没有函数可以直接使用 Spark SQL API 执行此操作。但是,您可以使用 UDF 代替(我假设输入数据帧称为 df):

val getIndex = udf((text: String, featuredText: Seq[String]) => {
  featuredText.indexOf(text)
})

val df2 = df.withColumn("index", getIndex($"text", $"featured_text"))

这将给出:

+----+-----------------+-----+
|text|    featured_text|index|
+----+-----------------+-----+
| sun|[type, move, sun]|    2|
+----+-----------------+-----+

如果值不存在,索引列将具有 -1。