Существуют ли дополнительные издержки для кэширования данных Spark в памяти? - PullRequest
1 голос
/ 07 апреля 2020

Я новичок в Spark и хотел понять, есть ли дополнительные издержки / задержки для сохранения и отмены сохранения данных в памяти.

Из того, что я знаю до сих пор, нет движения данных, которое происходит, когда мы использовали кеш данных, и он просто сохраняется в памяти исполнителя. Так что это должен быть только вопрос установки / снятия флага.

Я кэширую фрейм данных в задании потоковой передачи и хотел узнать, не приведет ли это к дополнительной задержке при выполнении пакета.

1 Ответ

1 голос
/ 07 апреля 2020

если есть дополнительные издержки / задержка для сохранения и отсутствия сохранения кадра данных в памяти.

Это зависит. Если вы помечаете только DataFrame как сохраняемый, на самом деле ничего не происходит, так как это ленивая операция. Вы должны выполнить действие, чтобы вызвать сохранение / кэширование DataFrame. С этим действием вы добавляете дополнительные издержки.

Более того, думайте о постоянстве (кэшировании) как о способе предварительного вычисления данных и сохранения их ближе к исполнителям (память, диск или их комбинации). Это перемещение данных из того места, в котором они находятся, к исполнителям добавляет дополнительные накладные расходы во время выполнения (даже если они незначительны).

Внутренне Spark управляет данными как блоками (используя BlockManager на исполнителях). Они одноранговые, чтобы обмениваться блоками по требованию (используя торрентоподобный протокол).

Отказ от поддержки DataFrame - это просто отправка запроса (syn c или asyn c) в BlockManager для удаления блоков RDD. Если это происходит в асинхронном режиме c, накладные расходы равны нулю (за исключением выполнения дополнительной работы исполнителями во время выполнения задач).

Так что это просто вопрос установки / снятия флага .

В некотором смысле, так оно и есть под одеялом. Поскольку DataFrame или RDD являются просто абстракциями для описания распределенных вычислений и ничего не делают во время создания, этот persist / unpersist просто устанавливает / снимает флажок.

Изменение можно заметить во время выполнения.

Я кэширую фрейм данных в задании потоковой передачи и хотел узнать, может ли это привести к дополнительной задержке при выполнении пакета.

Если вы используете асинхронное c кэширование ( по умолчанию) задержка должна быть минимальной.

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