2017-06-14 65 views
1

我有星火窗口功能相当简单(但必要的)问题(诸如lead, lag, count, sum, row_number等):并行的窗口功能2

如果指定我的窗口Window.partitionBy(lit(0))(即我需要运行整个数据框中的窗口函数),窗口集合函数是并行运行还是所有记录都移动到一个单独的任务中?

编辑:

特别是对“滚动”操作(例如,使用类似avg(...).Window.partitionBy(lit(0)).orderBy(...).rowsBetween(-10,10)移动平均),这种操作很可能被分成不同的任务甚至强硬的所有数据是在窗口,因为在同一个分区只有20行,需要一次计算平均

回答

1

如果定义为Window.partitionBy(lit(0))或者如果你没有定义partitionBy的话,那么全部dataframepartitions将是collected为一体,在一个executorexecutor将要执行aggregating功能整体dataframe。所以parallelism将不会被保留。

集合是不同的比collect()功能collect()功能将收集所有的partitionsdriver节点,但partitionBy功能将收集数据,以executor其中partitions很容易被收集。

+0

您还认为“滚动”操作是例如滚动平均值也不是以分布式方式实现的(请参阅我的更新答案)? –

+0

是@RaphaelRoth,我认为是。因为您将整个数据集定义为一个分区。所以他们将被洗牌,积累在一个执行者。 –