Apache Spark: перебирать строки данных и создавать новые данные через MutableList (Scala) - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время я пытаюсь научиться работать с Apache Spark в Scala.

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

enter image description here

Теперь я бы хотел перебрать строки, получить идентификатор и количество слов строки в столбце тела и вывести информацию в кадре данных с двумя столбцами.

def analyseDF(df:DataFrame): Unit = {
      //var retFrame = spark.emptyDataset[ClassIdCount].toDF()
      var tList = mutable.MutableList[IdCount]()

      df.foreach(row => {
        val wordCnt = row.getString(5).split(" ").size
        val mailid = row.getString(0)

        val record = IdCount(mailid.toString(), wordCnt.toInt)
        tList += record

        println(tList)
        println(record)

      })
      tList.toDF().show()
     // tList.toDS().show()

    }

Каким-то образом при вызове tList.toDF (). Show () кадр с двумя столбцами всегда пуст, но записи в цикле генерируются правильно.Кто-нибудь может дать мне подсказку здесь?

1 Ответ

0 голосов
/ 27 февраля 2019

типичная ошибка новичка: tList живет только на драйвере, его нельзя обновить из кода на стороне исполнителя.Это не то, как вы создаете фрейм данных из существующего фрейма данных.Вместо этого используйте преобразования / агрегирование.

В вашем случае вы можете сделать это с помощью встроенных функций Dataframe API split и size:

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

val transformedDf = df
  .select(
      $"id",
      size(split($"body"," "))).as("cnt")
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...