DataFrame 上的 count() 是否会将数据具体化给驱动程序/增加 OOM 的风险?

Does a count() over a DataFrame materialize the data to the driver / increase a risk of OOM?

我想 运行 df.count() 在我的 DataFrame 上,但我知道我的数据集总大小相当大。这是否 运行 将数据具体化回驱动程序的风险/增加我的驱动程序风险

这不会将您的整个数据集具体化给驱动程序,也不一定会增加您出现 OOM 的风险。 (它强制对传入的 DataFrame 进行评估,因此如果该评估意味着您将 OOM,那么它将在您 .count() 时被识别,但 .count() 本身并没有导致这个,它只是你意识到了)。

然而,这会做的是从您调用时停止执行您的作业。 .count()。这是因为驱动程序必须知道这个值才能继续您的任何其他工作,因此这不是 Spark / 分布式计算的特别有效使用。仅在必要时使用 .count(),即在选择分区计数或其他此类动态调整大小操作时。