의 관점에서 RDD
지속성 에서 스파크 cache()
와 차이점은 무엇 persist()
입니까?
답변
와 함께 cache()
, 당신은 단지 기본 저장 수준을 사용 :
MEMORY_ONLY
대한 RDDMEMORY_AND_DISK
에 대한 데이터 집합
을 사용하면 RDD 및 데이터 세트persist()
모두에 대해 원하는 스토리지 레벨을 지정할 수 있습니다 .
공식 문서에서 :
- 에 () 또는 () 메소드를
RDD
사용하여 지속되도록 표시 할 수 있습니다 .persist
cache
- 지속되는 각각
RDD
은 다른을 사용하여 저장할 수 있습니다storage level
cache
() 메소드는 기본 저장 레벨을 사용하는 속기StorageLevel.MEMORY_ONLY
(저장 메모리에서 객체를 탈 직렬화).
다음 persist()
이외의 스토리지 레벨을 지정하려는 경우 사용하십시오 .
MEMORY_ONLY
받는 RDD- 나
MEMORY_AND_DISK
에 대한 데이터 집합
공식 문서에 대한 흥미로운 링크 : 선택할 스토리지 레벨
답변
cache
와persist
운영 의 차이점 은 순전히 구문입니다. 캐시가 지속되거나 (지속의 동의어이다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
때문에 두 용어는 종종 서로 바꿔서 사용됩니다.
더 시각적으로 여기를 참조하십시오 ….
메모리와 디스크에 지속
은닉처
캐싱은 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.
답변
다른 점이 없다. 에서 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()
답변
스파크는 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 ()의 유일한 차이점은 캐시 기술을 사용하여 필요한 경우에만 중간 결과를 메모리에 저장할 수 있고 Persist ()에서는 중간 결과를 5 개의 스토리지 레벨 (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).