PySpark - DataFrame.count () вызывает кеш ()? - PullRequest
0 голосов
/ 27 февраля 2020

Если у меня очень большой DataFrame в моем кластере PySpark, вызовет ли он df.count() для него, весь DataFrame df будет помещен в память одного узла, или все отдельные узлы будут считать свою часть структурировать и вернуть его куда-нибудь для агрегирования в качестве конечного результата?

Я не вижу в документации ничего, что указывало бы на то или иное. По сути, я не хочу вызывать count() для DataFrame, который слишком велик, чтобы поместиться в память любого отдельного узла.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

count - это то, что может быть распределено между исполнителями. Итак, для каждого исполнителя подсчитайте их количество записей. Затем отправьте агрегированное количество записей для подсчета вместе. Оптимизация Spark позаботится об этих простых деталях.

Если вы позвоните collect(), то это приведет к тому, что драйвер будет заполнен полным кадром данных и, скорее всего, приведет к сбою.

1 голос
/ 27 февраля 2020

Лучшая практика для искры - не использовать счет, и рекомендуется использовать метод isEmpty вместо count, если это возможно. Кроме того, все искровые действия, кроме метода collect, будут выполняться для искровых исполнителей, и единственный результат вернется в драйвер искры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...