Spark: индекс значения в массиве внутри ColumnType - PullRequest
0 голосов
/ 03 октября 2018

В Spark, используя Scala, у меня есть набор данных со столбцом, имеющим массив типа

[foo, bar, baz, bei]
[foo, bar, baz, bei]
[foo, zie]

Теперь я хочу добавить еще один столбец с индексом значения "bar"

[foo, bar, baz, bei]     2  
[foo, zie]  0 

есть ли что-то похожее на

.withColumn("idx", array_contains(col("Name"),"bar"))

, которое возвращает мне true / false (мне нужен индекс значения)?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Начиная с версии 2.4.0 Spark предоставляет array_position функцию

import org.apache.spark.sql.functions.array_position

df.withColumn("idx", array_position($"Name", "bar"))
0 голосов
/ 03 октября 2018

С UDF:

val df = List(
  Seq("foo", "bar", "baz", "bei"),
  Seq("foo", "bar", "baz", "bei"),
  Seq("foo", "zie")
).toDF()

val getIndex = (seq: Seq[String]) => seq.indexOf("bar") + 1
val getIndexUDF = udf(getIndex)

val result = df.withColumn("idx", getIndexUDF($"value"))
result.show(false)

Выход:

+--------------------+---+
|value               |idx|
+--------------------+---+
|[foo, bar, baz, bei]|2  |
|[foo, bar, baz, bei]|2  |
|[foo, zie]          |0  |
+--------------------+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...