我有一个数据框。
我使用以下代码对数据框进行了分组。
val w = Window.partitionBy($"column name").orderBy($"column name".asc)
val group = table.withColumn("rank", row_number().over(w))
我想知道有什么办法可以一次参加一组。因为我需要给每个组另外一个逻辑。
谢谢:)
答案 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]
}
通过这种方式,我可以轻松地将逻辑放入每个分区。
应该有另一个更好的解决方案来解决此问题。作为一个初学者,我根据我的知识给出了这个答案。我只会发布我的答案,以告诉我谁需要帮助:)