首页 > 解决方案 > Spark - 在 groupby 和 collect 期间维护跨列的数据顺序

问题描述

如果我有

ID  Name     Code    Value
1   Person1  A       12
1   Person2  B       15

我做了一个

df.groupBy("ID").agg(
collect_set("Name").alias("Name"),
collect_set("Code").alias("Code"),
collect_set("Value").alias("Value")
)

我可能会得到一个

1, [Person1, Person2], [B,A], [15,12]

我需要得到一个

1, [Person1, Person2], [A,B], [12,15]

如何确保所有列的顺序相同?

我的实际 df 有 70 列,我需要按一列分组并以正确的顺序为每列选择前 5 个唯一值

任何建议都非常感谢

标签: scalaapache-sparkhadoop

解决方案


您无法确定集合中的顺序,我建议将属性打包在一个结构中,这将为您提供 1 个数组而不是 3 个。

df.groupBy("ID").agg(
  collect_list(struct("Name","Code","Value").as("Attribute")).as("Attributes")
)

推荐阅读