从Spark Sql中的element获取Seq索引

时间:2018-04-26 09:36:48

标签: scala apache-spark apache-spark-sql spark-dataframe

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

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

我想搜索"文字" " featured_text"中的列值数组并获取"文本"的索引值如果存在。在上面的例子中,我想搜索" sun"在数组[类型,移动,太阳]中,结果将是" 2" (索引)。

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

1 个答案:

答案 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。