首页 > 解决方案 > PySpark - DataFrame.count()是否会导致缓存()?

问题描述

如果我的 PySpark 集群上有一个非常大的 DataFrame,调用df.count()它会导致整个 DataFramedf被带入单个节点的内存中,还是所有单个节点都计算它们在结构中的一部分并将其返回到某个地方以聚合为最终结果?

我在文档中没有看到任何表明这种或另一种方式的内容。基本上我不想调用count()太大而无法放入任何单个节点的内存的 DataFrame。

标签: dataframeapache-sparkpyspark

解决方案


count 是可以分布在执行者之间的东西。因此,对于每个执行者,计算他们的记录数。然后发送要一起计算的汇总记录数。Spark 优化将处理这些简单的细节。

如果你collect()当时打电话,这就是导致驱动程序被完整的数据帧淹没的原因,并且很可能导致失败。


推荐阅读