엔지니어 블로그
[Spark] Lazy Evaluation 본문
Lazy Evaluation 이란?
Spark에는 Lazy Evaluation이라는 기능이 있습니다. Transformation 작업을 실행하더라도 실제 변환은 Action 작업이 진행될 때 까지 미루는 기능입니다. 예를 들어 df.filter() 작업을 수행하더라도 실제 데이터 변환 작업은 진행되지 않고, df.show()를 수행할 때 변환이 진행됩니다.
Lazy Evaluation을 사용하는 이유
Lazy Evaluation을 사용하는 이유는 효율적인 자원 활용을 위함입니다. 데이터 변환을 미루는 행위를 통해 전체 DataFrame을 메모리에 올리는 작업을 피할 수 있습니다. 조금 더 자세히는 매 변환 작업마다 DataFrame을 메모리로 가져오는 것을 피하여 자원 활용의 효율성을 높이기 위함입니다.
또 다른 중요한 이유는 CatalystOptimizer의 동작과 관련있습니다. CatalystOptimizer는 Spark가 수행할 변환 작업을 평가하고 효율적인 실행 계획을 세웁니다. Lazy Evaluation은 작업 수행을 뒤로 미루기 때문에 Action 시점에 여러 변환을 한번에 수행할 수 있게 됩니다. 비유하자면, 필요한 물건이 생길때 마다 슈퍼마켓을 가는 것이 아닌, 필요한 물건 list를 적어두고 한번에 슈퍼마켓을 가는 것과 같습니다.
Code
실제 코드로 예를 들어보겠습니다. 가격 컬럼에 대해 3번의 Transformation을 수행한 후 Action을 수행하는 코드가 있습니다.
df = df.withColumn('price', df.price * 2)
df = df.withColumn('price', df.price * 3)
df = df.withColumn('price', df.price * 5)
df_collect = df.collect()
Lazy Evaluation은 3번의 변환 코드가 실행될 때 까지도 작업을 보류합니다. 그리고 df.collect() 작업이 실행될 때 모든 계산을 통합하여 진행합니다. 즉 2,3,5를 각각 곱하는 3번의 작업이 실행되는 것이 아닌, 한번에 30(2 * 3 * 5)을 곱하는 방식으로 작업을 통합하여 진행하게 되는 것 입니다.
결론
Lazy Evaluation은 Spark의 기능으로 CatalystOptimizer와 상호작용 하여 효율성의 극대화를 가져옵니다. Spark에서 자동 작동하는 기능이기 때문에 실제로 구현할 일은 없습니다. 하지만 이를 통해 Spark의 작업 실행 방법에 대해 조금 더 이해할 수 있었던 공부였습니다.
참고 자료 :
https://medium.com/@john_tringham/spark-concepts-simplified-lazy-evaluation-d398891e0568
'Spark' 카테고리의 다른 글
[Spark] Spill로 인한 성능 저하 (1) | 2025.04.06 |
---|---|
[Spark] Partition (0) | 2025.03.26 |
[Spark] Spark 기본 동작 (0) | 2025.03.25 |
Parquet란? (0) | 2025.03.21 |
[Spark] Spark Architecture (0) | 2025.02.25 |