2017-12-08 23 views
1

저는 아파치 스파크를 배우고 스파크에서 RDD의 캐싱과 지속성과 관련된 개념을 없애려하고 있습니다.왜 기본 persist()는 직렬화되지 않은 객체로 JVM 힙의 데이터를 저장합니까?

그래서 책의 지속성의 문서 "스파크 학습"에 따라 :

는 RDD 여러 번 계산을 방지하기 위해, 우리는 데이터를 유지하기 위해 불꽃을 요청할 수 있습니다. RDD를 지속하도록 Spark에 요청하면 RDD를 계산하는 노드는 파티션을 저장합니다. 스파크는 목표가 무엇인지에 따라 선택할 수있는 많은 수준의 지속성을 제공합니다.

스칼라 및 Java에서 기본값 인 persist()는 의 데이터를 JVM 힙의 데이터를 병합되지 않은 객체으로 저장합니다. 파이썬에서 우리는 항상 저장소가 지속되는 데이터 인 을 직렬화하므로 기본값은 절체 된 개체로 JVM 힙에 저장됩니다. 디스크 나 힙 (off-heap) 스토리지에 데이터를 쓸 때 해당 데이터는 항상 으로 직렬화됩니다.

왜 is-- 기본이 지속() 것이다 저장 일렬 화를 푼 객체으로 JVM 힙의 데이터.

답변

3

직렬화 및 직렬화 해제 오버 헤드가 없기 때문에 저비용 작업이 가능하며 추가 메모리 없이도 캐시 된 데이터를로드 할 수 있습니다. SerDe는 비용이 많이 들고 전체 비용을 크게 증가시킵니다. 직렬화 및 직렬화 복원 된 객체 (특히 표준 Java 직렬화)를 유지하면 최악의 시나리오에서 메모리 사용을 두 배로 늘릴 수 있습니다.