스파크에서 실제 물리적인 데이터는 HDFS(HaDoop File System)나 클라우드 저장소에 존재하는 파티션이 되어 저장소 전체에 분산된다.
데이터가 파티션이 되어 물리적으로 분산되며, 스파크는 각 파티션을 메모리의 데이터 프레임 객체로 바라본다.
각 스파크 이그제큐터는 데이터 지역성을 고려하여 네트워크에서 가장 가까운 파티션을 읽도록 태스크를 할당한다.
이러한 파티셔닝을 통해, 네트워크 사용을 최소화하고 효과적인 병렬 처리를 가능하게 해준다.
이미 불변성의 특징을 가진 원본 데이터를 수정하지 않고 하나의 스파크 데이터 프레임을 새로운 데이터 프레임으로 변형하는 연산 (ex: select(), filter() 등)
트랜스포메이션의 결과는 즉시 계산되는게 아니라 계보(lineage)라 불리는 형태로 기록됨(지연평가)
기록된 리니지는 실행 계획의 후반에 확실한 트랜스포메이션들끼리 재배열 및 결합 등을 통해 최적화
모든 기록된 트랜스포메이션의 지연 평가를 발동시킴. 즉 액션 a가 호출되면 그 전까지 기록된 모든 트랜스포메이션이 실제로 실행되며 데이터에 접근함
(ex, show(), take() 등)
지연 평가를 통해 쿼리의 최적화를 가능하게 하며, 리니지와 데이터 불변성을 통해 데이터 내구성 제공
좁은 의존성
하나의 입력 파티션을 연산하여 하나의 결과 파티션을 내놓는 트랜스포메이션
넓은 의존성
groupBy()나 orderBy()를 쓸 경우, 다른 파티션으로부터 데이터를 읽어 들이고 디스크에 쓰는 작업 등