Как извлечь конкретные значения из массива строк в столбце данных? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть фрейм данных с двумя столбцами (words, numbers), так что под словами у меня есть массив строк и чисел, у меня есть массив целых чисел.

Например:

words: ["hello","there","Everyone"] and numbers: [0,4,5]

Я хотел бы иметь возможность получить слова, в которых целое число не равно 0. Таким образом, в приведенном выше сценарии должны быть возвращены только "там" и "все".

Я все еще новичок в scala и spark, и поэтому я попробовал фильтр, но как я могу попасть внутрь массива?и как я мог вернуть слова?

like df.filter(col("numbers") != 0)

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете просто определить следующий UDF:

val myUDF = udf { (a : Seq[String], b : Seq[Int]) => 
  a.zip(b).filter(_._2 != 0).map(_._1) 
}

Он объединяет массивы и фильтры на основе целочисленных значений.

df.select(myUDF($"words", $"numbers").as("words")).show

Возвращает соответствующие слова в массиве

+-----------------+
|            words|
+-----------------+
|[there, everyone]|
+-----------------+

Если вы хотите, чтобы каждое слово находилось в отдельной строке, вы можете использовать explode:

df.select(explode(myUDF($"words", $"numbers")).as("words")).show

, что приводит к

+--------+
|   words|
+--------+
|   there|
|everyone|
+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...