Как преобразовать DataFrame [result: String] в Scala в несколько строк? - PullRequest
0 голосов
/ 23 сентября 2019

Я новичок в Spark и Scala.Я использую пакет НЛП для анализа книги.Метод НЛП дает результат spark.sql.DataFrame = [result: string] выглядит следующим образом:

|     Result|
| a, b, c, d|
|      e,f,g|

Чтобы вычислить числа, каждое слово появляется , я хочу разделить строку на несколько строк, например:

|Result|
|     a|
|     b|
|     c|
|   ...|

Или у вас есть предложения по подсчету слов на основе DataFrame со структурой [result: string]?

1 Ответ

2 голосов
/ 23 сентября 2019

spark sql function explode поможет в этом случае использования.

См. Пример кода ниже;Я также добавил шаг подсчета слов:

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

val rows = List(
  "a, b, c, d",
  "a,b,c,d",
  "e,f,g"
)
val df = spark.sparkContext.parallelize(rows).toDF("Result")
df.show()
//  +----------+
//  |    Result|
//  +----------+
//  |a, b, c, d|
//  |   a,b,c,d|
//  |     e,f,g|
//  +----------+

val allWords = df.select(explode(split(col("Result"), ",")).as("Result"))
allWords.show()
//  +------+
//  |Result|
//  +------+
//  |     a|
//  |     b|
//  |     c|
//  |     d|
//  |     a|
//  |     b|
//  |     c|
//  |     d|
//  |     e|
//  |     f|
//  |     g|
//  +------+

val countPerWord = allWords.groupBy(trim(col("Result")).alias("Result"))
  .agg(countDistinct("Result").alias("Count"))
countPerWord.show()
//  +------+-----+
//  |Result|Count|
//  +------+-----+
//  |     g|    1|
//  |     f|    1|
//  |     e|    1|
//  |     d|    2|
//  |     c|    2|
//  |     b|    2|
//  |     a|    2|
//  +------+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...