-
[Spark] Spark Lazy Evaluation 알아보기Spark 2023. 5. 22. 07:52728x90반응형
- 목차
Transformation 과 Action.
Spark Application 은 Transformation 과 Action 들로 구성됩니다.
Transformation 은 filter, select, groupBy, orderBy 등이 있구요.
그리고 Action 은 show, write, collect, agg 등이 있습니다.
이들 각각은 이름에서도 알 수 있듯이,
Transformation 은 데이터를 변형하는 Operation 이며,
Action 은 새로운 Dataset 을 생성하는 Operation 입니다.
여기서 Action 의 내부적인 동작을 이해하는 것이 중요합니다.
Action 을 통해서 실질적인 Lazy Evaluation 이 수행되기 때문이죠.
Action 을 이해하기 예시를 작성해보겠습니다.List<Row> sourceData = Arrays.asList( RowFactory.create("Alice", 30, "Seoul"), RowFactory.create("Bob", 20, "Daegu"), RowFactory.create("Cindy", 25, "Busan") ); StructType schema = new StructType() .add(new StructField("name", DataTypes.StringType, false, Metadata.empty())) .add(new StructField("age", DataTypes.IntegerType, false, Metadata.empty())) .add(new StructField("city", DataTypes.StringType, false, Metadata.empty())); Dataset<Row> dataset = session.createDataFrame(sourceData, schema); Dataset<Row> dataset1 = dataset.filter("name = 'Andy'"); Dataset<Row> dataset2 = dataset1.select("name", "city"); dataset2.show();
위 예시에서 2개의 Transformation 과 1개의 Action 이 사용되었습니다.
filter, select 는 Transformation 입니다.
name 이 'andy' 인 Row 들을 필터링하고,
name, age, city 칼럼들 중에서 age 칼럼을 제외시킵니다.
그리고 show 라는 표준 출력을 위한 Action 이 수행되죠.
이렇게 Spark Application 은 위와 같이 Transformation 과 Action 들로 구성됩니다.
Lazy Evaluation.Lazy Evaluation 은 Transformation 의 수행을 지연시키는 것을 의미합니다.
filter 와 같은 Transformation Operation 이 코드의 수행 과정에서 즉각적으로 수행되는 것이 아니라
적절한 시기가 될때까지 지연됨을 뜻하는데요.
Transformation 이 수행되는 시점은 Action 이 실행되는 시점이며,
Action 이 Transformation 을 위한 트리거가 됩니다.
위 예시를 보면, show 라는 Action 이 수행될 때에 filter 와 select 에 해당하는 Transformation 이 실행됩니다.
이와 같이 Lazy Evaluation 을 사용함으로써 얻는 성능적인 이점이 있습니다.
이를 Query Optimization 라고 부르는데요.
관련된 이점을 살펴보겠습니다.
predicate pushdown.이는 DataSource 레벨에서 얻을 수 있는 이점입니다.
Avro, Parquet 와 같이 Schema 를 가지는 파일들은 자체적인 File Reader 를 활용하여 파일의 데이터를 조회합니다.
Filter 기능을 사용함으로써 File Read 과정에서 원하는 데이터만을 선별하여 조회할 수 있습니다.
마치 필요한 파일의 일부만을 로드하는 관점으로 Disk IO 를 줄이고, 최초로 로드되는 메모리 용량을 줄일 수 있습니다.column pruning.
Parquet, ORC 와 같은 Column-based File 들은 내부적으로 파일 조회시에 칼럼 단위로 필터링하는 것이 가능합니다.
이를 column pruning 이라고 합니다. Avro 나 JSON 같이 Row 기반의 파일에서 적용할 수는 없습니다.반응형'Spark' 카테고리의 다른 글
Helm 으로 Spark 구축하기 (0) 2023.12.15 Spark Driver Program 알아보기 (0) 2023.12.06 [Spark] SparkSQL CSV 파일 Aggregation 하기 (0) 2023.10.03 [Spark] RDD 로 숫자 처리하기 (0) 2023.01.19 [Spark] Docker 로 Spark Cluster 구현하기 ( Standalone Mode ) (0) 2022.07.18