Получить индекс Seq из элемента в Spark Sql - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть кадр данных, как показано ниже:

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

Я хочу найти значение столбца «text» в массиве «featured_text» и получить индекс значения «text», если оно есть. В приведенном выше примере я хочу найти «солнце» в массиве [type, move, sun], и результатом будет «2» (индекс).

Существует ли какая-либо функция spark sql / функция scala для получения индекса из элемента?

1 Ответ

0 голосов
/ 26 апреля 2018

Насколько я знаю, нет функции, которая бы делала это напрямую с 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. ​​

...