지연 평가는 실제로 Jobs 탭에 어떻게 찍히는가
PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Darshil Parmar PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Spark ignored your first five lines 구간, Jobs 페이지 스크린샷
이 모듈을 다 읽으면
- read+withColumn 5개 트랜스포메이션을 실행해도 Jobs 페이지에 새 Job이 안 뜨는 이유를 설명할 수 있다
- spark.read.csv(header=True) 자체가 헤더 확인을 위해 Job 1개를 미리 발생시킨다는 사실을 설명할 수 있다
- show()와 count() 같은 액션이 각각 몇 개의 Job을 만들어내는지 구분할 수 있다
read()와 세 번의 withColumn(), 그리고 filter+select까지 다섯 단계의 트랜스포메이션을 쌓아도 Spark Jobs 페이지는 여전히 Job 1개(그마저도 read 시점에 헤더를 읽기 위해 발생한 것)만 보여준다. 트랜스포메이션은 실행 계획만 쌓을 뿐 데이터를 건드리지 않기 때문이다. show()를 호출하면 Job이 3개 더 늘고 count()를 호출하면 다시 2개가 늘어나는데, 이 실습에서는 코드 3번째 줄에서 만든 문제가 40번째 줄에서야 터지는 현상의 원인이 바로 지연 평가임을 실제 숫자로 보여준다.
다섯 개의 트랜스포메이션, Job은 여전히 1개
raw = spark.read.csv(...)로 읽은 뒤 amount를 쉼표 제거 후 double로 캐스팅, order_ts를 타임스탬프로 파싱, status를 소문자로 바꾸는 세 번의 withColumn, 그리고 delivered 상태만 필터링해 두 컬럼을 select하는 것까지 다섯 단계를 이어 붙여도 Spark Jobs 페이지의 Completed Jobs는 여전히 1개뿐이다. 그 1개짜리 Job조차 지금 작성한 코드가 만든 것이 아니라, spark.read.csv가 헤더 옵션을 처리하려고 파일 일부를 미리 들여다보면서 발생시킨 것이다. withColumn 세 번, filter, select는 모두 실행 계획에 기록만 될 뿐 데이터를 전혀 건드리지 않는다 — 지연 평가의 실체를 Job 개수로 직접 확인한 셈이다.
핵심 포인트
- read+withColumn 3회+filter+select 다섯 단계를 쌓아도 Jobs 페이지의 Job 수는 늘지 않는다
- 유일한 Job 1개조차 read.csv가 헤더를 확인하려고 발생시킨 것이지 이후 트랜스포메이션 때문이 아니다
- 트랜스포메이션은 실행 계획만 쌓고 액션이 호출되기 전까지 데이터를 전혀 건드리지 않는다는 사실을 Job 개수로 직접 확인할 수 있다
액션 두 줄이 Job 세 개와 두 개를 만든다
delivered.show(5, truncate=False)를 호출하면 Jobs 페이지에 새로운 Job이 3개 생기고, 이어서 raw.count()를 호출하면 다시 2개가 생긴다. 결과적으로 코드 두 줄이 Job을 5개 만들어낸 것이다. Jobs 페이지가 비어 있다는 것은 "코드가 잘못됐다"는 뜻이 아니라 "아직 아무 질문도 하지 않았다"는 뜻이며, 이 한 가지 원리가 초보자들이 겪는 혼란 대부분을 설명한다 — 3번째 줄에서 써넣은 버그가 40번째 줄에서야 폭발하는 이유도 바로 이것이다.
핵심 포인트
- show()와 count() 같은 액션만이 실제로 Job을 만들어낸다
- 코드 두 줄(show, count)이 Job을 5개(3개+2개) 만들어낸 사례로 액션과 트랜스포메이션의 차이를 실감할 수 있다
- "Jobs 페이지가 비었다"는 코드가 잘못된 게 아니라 아직 액션을 호출하지 않았다는 뜻이다