当前位置: 首页 > 知识库问答 >
问题:

collect_list()是否维护行的相对顺序?

云弘壮
2023-03-14
+---+-----------+------------+
| id|featureName|featureValue|
+---+-----------+------------+
|id1|          a|           3|
|id1|          b|           4|
|id2|          a|           2|
|id2|          c|           5|
|id3|          d|           9|
+---+-----------+------------+
df.groupBy("id")
  .agg(collect_list($"featureIndex").as("idx"),
       collect_list($"featureValue").as("val"))
GOOD                   GOOD                   BAD
+---+------+------+    +---+------+------+    +---+------+------+
| id|   idx|   val|    | id|   idx|   val|    | id|   idx|   val|
+---+------+------+    +---+------+------+    +---+------+------+
|id3|   [d]|   [9]|    |id3|   [d]|   [9]|    |id3|   [d]|   [9]|
|id1|[a, b]|[3, 4]|    |id1|[b, a]|[4, 3]|    |id1|[a, b]|[4, 3]|
|id2|[a, c]|[2, 5]|    |id2|[c, a]|[5, 2]|    |id2|[a, c]|[5, 2]|
+---+------+------+    +---+------+------+    +---+------+------+

共有1个答案

巫马浩言
2023-03-14

我认为您可以依赖于“它们的相对顺序”,因为Spark会按顺序逐个遍历行(如果不明确需要,通常不会对行重新排序)。

如果您关心顺序,请在执行groupby之前使用struct函数合并这两列。

struct(colname:String,colnames:String*):Column创建一个新的结构列,该列组成多个输入列。

 类似资料:
  • 问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。

  • 目前,我正在测试一个具有CRUD操作的类(例如)。按照后面使用的方法,我想按照创建、读取、更新和删除的顺序测试所有操作。 由于JUnit中测试用例的执行顺序依赖于JVM,所以我需要一些适当的方法来确保单元测试用例按照给定的顺序执行。 到目前为止,我提出了以下策略: > 在JUnit4中使用按名称的升序执行方法。然而,这需要重命名测试用例,而且对我来说似乎不是最好的方法,因为在未来需要添加更多的测试

  • 我有一个从各种文件加载时间序列数据的应用程序。应用程序为每个文件打开一个线程以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以维护事件的整体顺序。 这是否可以使用像多个生产者一样的破坏者——一种消费者类型的设计来实现,以维持事件的顺序? 我目前正在使用阻塞集合和排序列表对每个阻塞集合的头部进行排序,但这会消耗大量内存,我想看看是否有其他人使用不同的体系结构实现了类似

  • Navicat 为维护 MongoDB 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 修复数据库 通过放弃无效或损坏的数据来重新生成数据库和索引。 集合 选项 描述 压缩集合 对集合中的所有数据和索引进行重写和碎片整理。 验证集合 通过扫描集合的数据和索引

  • Navicat 为维护 SQLite 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 分析数据库 收集有关数据库的统计数据。 真空数据库 重新生成数据库文件。它只适用于 main 数据库。 重新生成数据库索引 删除并重新生成数据库内的所有索引。 表 选项 描

  • Navicat 为维护 SQL Server 对象提供完整的解决方案。 在主窗口的导航窗格中或对象选项卡中选择对象。 右击已选择的对象。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 结果显示在弹出的窗口中。 数据库 选项 描述 读写 将数据库设置为读写模式。 只读 将数据库设置为只读模式。 在线 使数据库在线。 离线 使数据库离线。 紧急 将数据库设置为紧急状态。 多个用户 将数据库设置为