代码之家  ›  专栏  ›  技术社区  ›  CRV

在数据帧中一次选择一个组

  •  0
  • CRV  · 技术社区  · 6 年前

    我有一个数据帧。

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

      val w = Window.partitionBy($"column name").orderBy($"column name".asc)
    
      val group = table.withColumn("rank", row_number().over(w))
    

    谢谢:)

    1 回复  |  直到 6 年前
        1
  •  0
  •   CRV    6 年前

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

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

    应该有另一个更好的解决办法来解决这个问题。作为初学者,我根据自己的知识提出了这个答案。我发布我的答案只是想告诉大家谁需要帮助,就像我一样:)