在数据框中一次选择一组

时间:2018-12-27 03:44:28

标签: scala apache-spark dataframe

我有一个数据框。

我使用以下代码对数据框进行了分组。

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

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

我想知道有什么办法可以一次参加一组。因为我需要给每个组另外一个逻辑。

谢谢:)

1 个答案:

答案 0 :(得分:0)

这就是我解决我的问题的方法:)

首先,我根据列名对数据帧进行分区,并将每个分区写入一个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]
      }

通过这种方式,我可以轻松地将逻辑放入每个分区。

应该有另一个更好的解决方案来解决此问题。作为一个初学者,我根据我的知识给出了这个答案。我只会发布我的答案,以告诉我谁需要帮助:)