Выберите одну группу за один раз в кадре данных - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть фрейм данных.

Я сгруппировал фрейм данных, используя следующий код.

  val w = Window.partitionBy($"column name").orderBy($"column name".asc)

  val group = table.withColumn("rank", row_number().over(w))

Я хочу знать, есть ли способ взять одну группу за один раз.Потому что мне нужно поставить другую логику для каждой группы.

Спасибо:)

1 Ответ

0 голосов
/ 09 января 2019

Это то, что я сделал, чтобы решить мою проблему:)

Сначала я разбиваю фрейм данных в соответствии с именем столбца, записываю каждый раздел в файл csv и сохраняю его в новой папке.

    df
    .write
    .partitionBy("column name")
    .csv("path_to_save_csv_file")

Во-вторых, я собираю имена CSV-файлов в указанной выше папке в список.

      val dir = new File("path_to_save_csv_file")
      val file: List[String] = dir
       .listFiles
       .filter(_.isFile)
       .filter(_.getName.endsWith(".csv"))
       .map(_.getName)
       .toList

После этого я читаю каждый CSV-файл в кадре данных с помощью цикла.

      for (fileName <- file){
        val df_fileName = spark
         .read
         .option("header", true)
         .csv("path_to_save_csv_file"+fileName)
         .toDF(classOf[caseClass_name].getDeclaredFields.map(x => x.getName):_*)
         .as[caseClass_name]
      }

Втаким образом, я могу легко поместить свою логику в каждый раздел.

Должно быть другое лучшее решение для решения этой проблемы.Как новичок я поставил этот ответ в соответствии со своими знаниями.Я только публикую свой ответ, чтобы дать представление о том, кто нуждается в помощи, как я:)

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