我正在为非常大的数据帧编写管道。为了快速原型化,我尝试从数据帧中缓存少量样本。
我的期望是,我可以通过执行以下代码来有效地实现这一目标。
df.limit(1).cache().collect()
但是,如下图所示,这将创建两个阶段,第一个阶段将缓存整个数据帧(玩具示例为99.3gb)。
这令人惊讶,因为当我删除缓存方法(离开df.limit(1).collect()
)时,spark产生了一个收集阶段,该收集阶段仅应用于数据帧中的单个分区。参见下面的图片。
比较限制与显示/收集/获取(具有一个分区的阶段)与计数(具有完整数据帧的阶段)组合的阶段时,也会观察到相同的差异。
尽管我可以通过手动过滤单个分区来加快缓存的速度,但是我仍然遇到以下两个问题: