我有一个如下所示的数据框:
---------------------+------------------------
text | featured_text
---------------------+------------------------
sun | [type, move, sun]
---------------------+------------------------
我想搜索"文字" " featured_text"中的列值数组并获取"文本"的索引值如果存在。在上面的例子中,我想搜索" sun"在数组[类型,移动,太阳]中,结果将是" 2" (索引)。
是否有任何spark sql函数/ scala函数可用于从元素中获取索引?
答案 0 :(得分:2)
据我所知,没有直接使用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。