Spark-合并后,聚合列从DataFrame中消失

时间:2018-08-14 14:52:02

标签: scala apache-spark apache-spark-sql

我想对每个sale_id的商品数进行计数,因此决定使用计数功能。想法是将item_numbers作为最后一列,而不影响从salesDf开始的原始列。

但是在加入sale_id列之后,它成为df3中的第一列。因此,为了解决此问题,我尝试了.select(salesDf.schema.fieldNames.map(col):_*),但是此item_numbers列丢失了(而其他列的排序是正确的)。

如何保留正确的排序,同时保留item_numbers列?

 val df2 = salesDf.groupBy("sale_id").agg(count("item_id").as("item_numbers"))
 val df3 = salesDf.join(df2, "sale_id").select(salesDf.schema.fieldNames.map(col):_*)

1 个答案:

答案 0 :(得分:1)

要在最终结果中保留salesDf的列顺序,您可以按以下步骤组装select的列列表:

val df2 = salesDf.groupBy("sale_id").agg(count("item_id").as("item_numbers"))
val df3 = salesDf.join(df2, "sale_id")

val orderedCols = salesDf.columns :+ "item_numbers"
val resultDF = df3.select(orderedCols.map(col): _*)