В чем разница между кешем и упорством?

В терминах сохранения RDD, каковы различия между cache() и persist() в искры?

Ответ 1

С cache() вы используете только уровень хранения по умолчанию MEMORY_ONLY. С помощью persist() вы можете указать, какой уровень хранилища вы хотите (rdd-persistence).

Из официальных документов:

  • Вы можете пометить RDD как сохраняемый с помощью методов persist() или cache().
  • каждый сохраненный RDD может быть сохранен с использованием другого storage level
  • Метод cache() является сокращением для использования уровня хранилища по умолчанию - StorageLevel.MEMORY_ONLY (хранить десериализованные объекты в памяти).

Используйте persist() если вы хотите назначить уровень хранения, отличный от MEMORY_ONLY для RDD (какой уровень хранения выбрать)

Ответ 2

Разница между операциями с cache и persist чисто синтаксическая. кеш является синонимом постоянного или постоянного (MEMORY_ONLY), то есть cache просто persist с уровнем хранения по умолчанию MEMORY_ONLY


/** * Сохранить этот СДР с уровнем хранения по умолчанию (MEMORY_ONLY). */
def persist(): this.type = persist (StorageLevel.MEMORY_ONLY)

/** * Сохранить этот СДР с уровнем хранения по умолчанию (MEMORY_ONLY). */
def cache(): this.type = persist()

подробности смотрите здесь...


Кэширование или сохранение являются методами оптимизации (итеративных и интерактивных) вычислений Spark. Они помогают сохранить промежуточные частичные результаты, чтобы их можно было использовать на последующих этапах. Эти промежуточные результаты в виде RDD, таким образом, хранятся в памяти (по умолчанию) или в более надежном хранилище, таком как диск, и/или тиражируются. RDD можно кэшировать с помощью операции cache. Они также могут быть сохранены, используя persist операцию.

persist, cache

Эти функции могут использоваться для настройки уровня хранения RDD. При освобождении памяти Spark будет использовать идентификатор уровня хранилища, чтобы решить, какие разделы следует сохранить. Варианты без параметров persist() и cache() являются просто сокращениями для persist(StorageLevel.MEMORY_ONLY).

Предупреждение: после изменения уровня хранения его нельзя изменить снова!

Предупреждение -Cache рассудительно... см. ((Почему) нам нужно вызывать кэш или сохранять на RDD)

То, что вы можете кэшировать RDD в памяти, не означает, что вы должны делать это вслепую. В зависимости от количества обращений к набору данных и объема работы, выполняемой при этом, пересчет может быть быстрее, чем цена, заплаченная из-за повышенного давления памяти.

Само собой разумеется, что если вы читаете набор данных только один раз, когда нет смысла его кэшировать, это фактически замедлит вашу работу. Размер кэшированных наборов данных можно увидеть из Spark Shell.

Листинг Варианты...

def cache(): RDD[T]
 def persist(): RDD[T]
 def persist(newLevel: StorageLevel): RDD[T]

* Смотрите пример ниже: *

val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
     c.getStorageLevel
     res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
     c.cache
     c.getStorageLevel
     res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)

enter image here

Примечание. Из-за очень небольшой и чисто синтаксической разницы между кэшированием и сохранностью RDD эти два термина часто используются взаимозаменяемо.

Смотрите больше визуально здесь....

Сохраняться в памяти и на диске:

enter image description here

кэш

Кэширование может значительно повысить производительность вашего приложения.

enter image description here

Ответ 3

Нет никакой разницы. От RDD.scala.

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()

Ответ 4

Искра дает 5 типов уровня хранения

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache() будет использовать MEMORY_ONLY. Если вы хотите использовать что-то еще, используйте persist(StorageLevel.<*type*>).

По умолчанию persist() будет Храните данные в куче JVM как несериализованные объекты.

Ответ 5

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

Единственная разница между cache() и persist() заключается в том, что с помощью техники Cache мы можем сохранять промежуточные результаты в памяти только при необходимости, а в Persist() мы можем сохранять промежуточные результаты на 5 уровнях хранения (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).

Ответ 6

Как мы поняли, с cache() мы используем только уровень хранения по умолчанию MEMORY_ONLY. С помощью persist() мы можем указать, какой уровень хранилища нам нужен. Мой вопрос здесь, если оба одинаковы, почему у нас есть 2 типа методов. Если нет, то в чем разница между ниже двух? Пожалуйста подтвердите.

cache()
persist(MEMORY_ONLY)