Сохраняются разные значения по умолчанию для Rdd и Dataset - PullRequest
0 голосов
/ 01 сентября 2018

Я пытался найти хороший ответ, почему для RDD по умолчанию сохраняются значения MEMORY_ONLY и набора данных MEMORY_AND_DISK. Но не смог найти это. Мне интересно, знает ли кто-нибудь из вас веские причины?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Для rdd уровень хранения по умолчанию для постоянного файла API - MEMORY, а для набора данных - MEMORY_AND_DISK

Пожалуйста, проверьте ниже

[SPARK-3824] [SQL] Устанавливает уровень хранения таблицы в памяти по умолчанию в MEMORY_AND_DISK

Как упомянуто @ user6910411 " Spark SQL в настоящее время использует формат MEMORY_ONLY в качестве формата по умолчанию. Однако из-за использования буферов столбцов существует огромная стоимость необходимости пересчитывать блоки, намного больше, чем ядро ​​Spark.", т.е. набор данных / dataframe apis использует буферы столбцов для хранения типа данных столбца и сведений о столбцах о необработанных данных, поэтому в случае, если при кэшировании данные не помещаются в память, они не будут кэшироваться для остальной части раздела и будут пересчитываться всякий раз, когда Так что в случае набора данных / фрейма данных стоимость повторного вычисления больше по сравнению с rdd из-за его столбчатой ​​структуры. Поэтому опция сохранения по умолчанию была изменена на MEMORY_AND_DISK, так что блоки, которые не помещаются в память, будут проливаться на диск, и это будет извлекается с диска при необходимости, а не при повторном вычислении в следующий раз.

0 голосов
/ 01 сентября 2018

Просто потому, что MEMORY_ONLY редко используется - на практике не так часто иметь достаточно памяти для хранения всех требуемых данных, поэтому вам часто приходится удалять некоторые блоки или кэшировать данные только частично.

По сравнению с этим DISK_AND_MEMORY извлекает данные на диск, поэтому кешированный блок не теряется.

Точная причина выбора MEMORY_AND_DISK в качестве режима кэширования по умолчанию объясняется следующим образом: SPARK-3824 ( Spark SQL должен кэшироваться в MEMORY_AND_DISK по умолчанию ):

Spark SQL в настоящее время использует MEMORY_ONLY в качестве формата по умолчанию. Однако из-за использования буферов столбцов приходится пересчитывать блоки очень дорого, гораздо больше, чем ядро ​​Spark. Тем более что теперь мы более консервативны в отношении блоков кэширования и иногда не будем кэшировать блоки, которые, по нашему мнению, могут превышать объем памяти, по-видимому, по умолчанию рекомендуется сохранять сохраненные блоки на диске.

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