Scala объединяет столбец массива [String] в один массив [String] - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть Spark Dataframe (Scala) со столбцами id - (Int) и tokens - (array<string>):

id,tokens
0,["a","b","c"]
1,["a","b"]
...

Предполагается, что я могу получить данные через SparkSession и привести к классу дела:

case class Token(id: Int, tokens: Array[String])

После получения объекта Dataset[Token] как мне объединить весь массив строковых токенов в один Array<String>, а затем выполнить подсчет, чтобы найти наиболее встречающиеся строки?

Выход:

a,2
b,2
c,1
...

1 Ответ

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

Вам необходимо explode столбец токена и считать после группирования по отдельным токенам:

scala> val input = sc.parallelize(List(
  (0, Array("a","b","c")), 
  (1, Array("a","b"))
)).toDF("id","token")

scala> input.withColumn("token_split",explode($"token"))
         .groupBy($"token_split")
         .agg(count($"id") as "count")
         .orderBy($"count".desc)
         .show

Выход:

+-----------+-----+
|token_split|count|
+-----------+-----+
|          b|    2|
|          a|    2|
|          c|    1|
+-----------+-----+
...