Programing

캐시와 지속의 차이점은 무엇입니까?

lottogame 2020. 5. 10. 10:12
반응형

캐시와 지속의 차이점은 무엇입니까?


RDD지속성 측면 에서 스파크 cache()차이점은 무엇 persist()입니까?


와 함께 cache(), 당신은 단지 기본 스토리지 레벨을 사용합니다 MEMORY_ONLY. 을 사용하여 persist()원하는 스토리지 레벨을 지정할 수 있습니다 ( rdd-persistence ).

공식 문서에서 :

  • () 또는 () 메소드를 RDD사용하여 지속되도록 표시 할 수 있습니다 .persistcache
  • 지속되는 각각 RDD은 다른을 사용하여 저장할 수 있습니다storage level
  • cache() 메소드는 기본 저장 레벨을 사용하는 속기 StorageLevel.MEMORY_ONLY(저장 메모리에서 객체를 탈 직렬화).

사용 persist()이 아닌 다른 저장 수준을 할당 할 경우 MEMORY_ONLY받는 사람 RDD( 선택할 수있는 스토리지 수준 )


cachepersist운영 의 차이점 은 순전히 구문입니다. 캐시가 지속되거나 (지속의 동의어이다 MEMORY_ONLY), 즉 cache단지입니다 persist기본 저장 용량 수준으로MEMORY_ONLY


/ ** *이 RDD를 기본 저장소 수준 ( MEMORY_ONLY)으로 유지합니다. * /
def persist () : this.type = persist (StorageLevel.MEMORY_ONLY)

/ ** *이 RDD를 기본 저장소 수준 ( MEMORY_ONLY)으로 유지합니다. * /
def cache () : this.type = persist ()

자세한 내용은 여기를 참조하십시오 ...


캐싱 또는 지속성은 (반복 및 대화식) Spark 계산을위한 최적화 기술입니다. 중간 부분 결과를 저장하여 이후 단계에서 재사용 할 수 있습니다. 따라서 이러한 중간 결과 RDD는 메모리 (기본값) 또는 디스크와 같은 더 견고한 저장소 및 / 또는 복제에 유지됩니다. 작업을 RDD사용하여 캐시 할 수 있습니다 cache. persist작업을 사용하여 지속될 수도 있습니다 .

persist, cache

이 기능을 사용하여의 저장 레벨을 조정할 수 있습니다 RDD. 메모리를 확보 할 때 Spark는 스토리지 수준 식별자를 사용하여 유지할 파티션을 결정합니다. 매개 변수 less variant persist() 및 cache()는 다음에 대한 약어입니다.persist(StorageLevel.MEMORY_ONLY).

경고 : 저장 레벨이 변경되면 다시 변경할 수 없습니다!

경고-캐시를 신중하게 ... 참조 ( (왜) 캐시를 호출하거나 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)

여기에 이미지를 입력하십시오

참고 : 캐싱과 지속성의 지속성이 매우 작고 순전히 다르기 RDD때문에 두 용어는 종종 서로 바꿔서 사용됩니다.

더 시각적으로 여기를 참조하십시오 ....

메모리와 디스크에 지속

여기에 이미지 설명을 입력하십시오

Cache

Caching can improve the performance of your application to a great extent.

여기에 이미지 설명을 입력하십시오


There is no difference. From 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()

Spark gives 5 types of Storage level

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache() will use MEMORY_ONLY. If you want to use something else, use persist(StorageLevel.<*type*>).

By default persist() will store the data in the JVM heap as unserialized objects.


Cache() and persist() both the methods are used to improve performance of spark computation. These methods help to save intermediate results so they can be reused in subsequent stages.

The only difference between cache() and persist() is ,using Cache technique we can save intermediate results in memory only when needed while in Persist() we can save the intermediate results in 5 storage levels(MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).

참고 URL : https://stackoverflow.com/questions/26870537/what-is-the-difference-between-cache-and-persist

반응형