scala - 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 个唯一值
任何建议都非常感谢
解决方案
您无法确定集合中的顺序,我建议将属性打包在一个结构中,这将为您提供 1 个数组而不是 3 个。
df.groupBy("ID").agg(
collect_list(struct("Name","Code","Value").as("Attribute")).as("Attributes")
)
推荐阅读
- php - 主题wordpress 5.7中的损坏的imgs
- c# - 有没有办法每次都打开同一个 WPF 应用程序实例?
- python - 如何防止/禁止 Decimal 使用科学记数法?
- haskell - Websockets + 服务端
- android - 如何在适用于 Android 的 Tensorflow Lite 上使用 HAL 1.2 版?
- r - R中的Fortran样式格式?
- html - 如何推动垫柱并保留其在数组中的原始位置?
- php - 为什么使用 DOMDocument 会使网站加载速度变慢?
- javascript - PhantomJS ReferenceError:找不到变量:获取
- push-notification - 谷歌身份验证使用刷新令牌获取访问令牌