dataframe列列出pyspark中的保存顺序

9rygscc1  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(590)

我有一个sparkDataframe,包含两列,“id”和“timetamp”。如何将“id”列转换为按时间戳保留原始顺序的列表?当我尝试收集时,顺序是不守恒的。
谢谢

iswrvxsc

iswrvxsc1#

你不能使用 collect_list ,因为它是一个组上元素的非确定性集合,请参见-

/**
   * Aggregate function: returns a list of objects with duplicates.
   *
   * @note The function is non-deterministic because the order of collected results depends
   * on order of rows which may be non-deterministic after a shuffle.
   *
   * @group agg_funcs
   * @since 1.6.0
   */
  def collect_list(e: Column): Column = withAggregateFunction { CollectList(e.expr) }

在分布式计算中,收集一定顺序的元素是不可能的,因为数据分布在节点之间。要实现这一点,您需要将数据收集到执行器上的单个分区,然后执行聚合。 This may cause Resource crunch on the executor . 如果您知道您的数据数量较少,可以使用 UDAF 通过将数据合并到 1 .
如果您有一个不倾斜的重新分区列,那么您可以以性能可靠的方式执行此操作
下面是一个根据cloudera的时间戳对值进行排序的好例子

相关问题