Как отфильтровать массив данных в фрейме искры с помощью scala - PullRequest
0 голосов
/ 17 мая 2018

Я начинающий со Scala.

У меня есть датафрейм с 2 столбцами:

первая - это дата, вторая - массив слов.

created_at:string
words:array
    element:string

Я хочу, чтобы только слова начинались с '#'

Я бы предпочел сделать фильтр до взрыва массива, так как большинство слов не начинаются с '#'

Я не нашел способа изменить столбец массива и применить что-то вроде фильтра (_. StartWith ("#")).

Возможно ли это? и как?

Спасибо в

Pierre

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Попробуйте это:

import org.apache.spark.sql.functions._ 

df.select(explode(col("words")).as("word"), col("created_at")).
       where("word LIKE '#%'").
       groupBy(col("created_at")).
       agg(collect_set(col("word")).as("words")).
       show
0 голосов
/ 17 мая 2018

Вы можете создать простой UDF для фильтрации нежелательных слов из столбца массива:

val df = Seq(
  ("2018-05-01", Seq("a", "#b", "c")),
  ("2018-05-02", Seq("#d", "#e", "f"))
).toDF("created_at", "words")

def filterArray = udf( (s: Seq[String]) =>
  s.filterNot(_.startsWith("#"))
)

df.select($"created_at", filterArray($"words")).show
// +----------+----------+
// |created_at|UDF(words)|
// +----------+----------+
// |2018-05-01|    [a, c]|
// |2018-05-02|       [f]|
// +----------+----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...