С точки зрения RDD
настойчивости, каковы различия между cache()
и persist()
в искре?
202
С точки зрения RDD
настойчивости, каковы различия между cache()
и persist()
в искре?
При cache()
использовании вы используете только уровень хранения по умолчанию:
MEMORY_ONLY
для СДРMEMORY_AND_DISK
для набора данныхС помощью persist()
вы можете указать, какой уровень хранилища вы хотите использовать как для RDD, так и для набора данных .
Из официальных документов:
- Вы можете пометить
RDD
для сохранения, используя методыpersist
() илиcache
() на нем.- каждый сохраненный
RDD
может быть сохранен с использованием другогоstorage level
- Метод
cache
() является сокращением для использования уровня хранилища по умолчанию, а именноStorageLevel.MEMORY_ONLY
(хранение десериализованных объектов в памяти).
Используйте, persist()
если вы хотите назначить уровень хранения, отличный от:
MEMORY_ONLY
в СДРMEMORY_AND_DISK
для набора данныхИнтересная ссылка на официальную документацию: какой уровень хранения выбрать
cache()
теперь используется MEMORY_AND_DISKMEMORY_AND_DISK
это значение по умолчанию только для наборов данных.MEMORY_ONLY
по-прежнему значение по умолчанию для СДРподробности смотрите здесь ...
Кэширование или сохранение являются методами оптимизации (итеративных и интерактивных) вычислений Spark. Они помогают сохранить промежуточные частичные результаты, чтобы их можно было использовать на последующих этапах.
RDD
Таким образом, эти промежуточные результаты сохраняются в памяти (по умолчанию) или в более надежном хранилище, таком как диск, и / или тиражируются.RDD
s можно кэшировать с помощьюcache
операции. Они также могут быть сохранены с помощьюpersist
операции.Предупреждение - Кэшируйте разумно ... смотрите ( (Почему) нам нужно вызывать кеш или сохранять на RDD )
То, что вы можете кэшировать данные
RDD
в памяти, не означает, что вы должны делать это вслепую. В зависимости от количества обращений к набору данных и объема работы, выполняемой при этом, пересчет может быть быстрее, чем цена, заплаченная из-за повышенного давления памяти.Само собой разумеется, что если вы читаете набор данных только один раз, когда нет смысла его кэшировать, это фактически замедлит вашу работу. Размер кэшированных наборов данных можно увидеть из Spark Shell.
Листинг Варианты ...
* См. Пример ниже: *
Примечание. Из-за очень небольшой и чисто синтаксической разницы между кэшированием и постоянством
RDD
s эти два термина часто используются взаимозаменяемо.Смотрите больше визуально здесь ....
Сохраняться в памяти и на диске:
кэш
Кэширование может значительно повысить производительность вашего приложения.
источник
Нет никакой разницы. От
RDD.scala
.источник
Spark дает 5 типов уровня хранения
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
будем использоватьMEMORY_ONLY
. Если вы хотите использовать что-то еще, используйтеpersist(StorageLevel.<*type*>)
.По умолчанию данные
persist()
будут храниться в куче JVM как несериализованные объекты.источник
Cache () и persist () оба метода используются для повышения производительности вычислений с использованием искры. Эти методы помогают сохранить промежуточные результаты, чтобы их можно было повторно использовать на последующих этапах.
Единственная разница между cache () и persist () заключается в том, что используя технику Cache, мы можем сохранять промежуточные результаты в памяти только при необходимости, а в Persist () мы можем сохранять промежуточные результаты на 5 уровнях хранения (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).
источник