首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >星火的RDD.combineByKey()是否保持先前排序的DataFrame的顺序?

星火的RDD.combineByKey()是否保持先前排序的DataFrame的顺序?
EN

Stack Overflow用户
提问于 2017-04-26 10:38:30
回答 1查看 419关注 0票数 0

我在PySpark中这样做过:

  1. 使用DataFrame语句创建一个SELECT,以获取按资产序列号排序的资产数据,然后按时间排序。
  2. 使用DataFrame.map()DataFrame转换为RDD
  3. 使用RDD.combineByKey()整理每个资产的所有数据,使用资产的序列号作为密钥。

问题:,我能确定每个资产的数据仍然会在最后一步的RDD中按时间顺序排序吗?

时间顺序对我来说是至关重要的(我需要在每个资产的移动时间窗口上计算统计数据)。当RDD.combineByKey()为给定的密钥组合来自火花集群中不同节点的数据时,该键的数据中是否保留了任何顺序?或者,对于给定的密钥,来自不同节点的数据是否按特定顺序合并?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-26 13:59:39

我是否可以确定每个资产的数据仍将按RDD中的时间顺序排序,这是最后一步的结果?

你不能。当您跨多个维度(按资产序列号和时间排序的数据)应用排序时,单个asset的记录可以跨多个分区传播。combineByKey将需要一次洗牌,并且不能保证组合这些部件的顺序。

您可以尝试使用repartitionsortWithinPartitions (或RDDs):

代码语言:javascript
运行
复制
df.repartition("asset").sortWithinPartitions("time")

代码语言:javascript
运行
复制
df.repartition("asset").sortWithinPartitions("asset", "time")

或具有框架定义的窗口功能如下:

代码语言:javascript
运行
复制
w = Window.partitionBy("asset").orderBy("time")

在SparkSQL2.0中,>= 2.0窗口函数可以与UserDefinedFunctions一起使用,因此,如果您能够在Scala中编写自己的UserDefinedFunctions扩展,就可以完全跳过转换到UserDefinedFunctions的过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43631820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档