/**
* 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的时间戳对值进行排序的好例子
1条答案
按热度按时间iswrvxsc1#
你不能使用
collect_list
,因为它是一个组上元素的非确定性集合,请参见-在分布式计算中,收集一定顺序的元素是不可能的,因为数据分布在节点之间。要实现这一点,您需要将数据收集到执行器上的单个分区,然后执行聚合。
This may cause Resource crunch on the executor
. 如果您知道您的数据数量较少,可以使用UDAF
通过将数据合并到1
.如果您有一个不倾斜的重新分区列,那么您可以以性能可靠的方式执行此操作
下面是一个根据cloudera的时间戳对值进行排序的好例子