ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Glue] Session / Context 개념 정리
    클라우드/Data Engineering 2025. 10. 11. 16:37

    1. SparkSession (스파크 세션)

    - 실제 일을 하는 엔진

    - df.filter(), df.join(), df.write() 같은 DataFrame 연산을 하면, 이걸 실제로 실행하고 계산하는 게 SparkSession

    - 즉, Spark 안에서 데이터를 불러오고, 처리하고, 저장하는 모든 핵심 동작의 중심

    - Glue에서도 결국 SparkSession이 실제 연산을 수행

    2. GlueContext (글루 컨텍스트)

    - AWS Glue용 Spark 관리 도우미

    - AWS Glue Job에서 Spark를 더 쉽게 쓸 수 있도록 Glue 전용 도구를 제공합

    • 예를 들어:
      • create_dynamic_frame.from_catalog() → Glue Data Catalog에서 데이터 불러오기
      • write_dynamic_frame.from_options() → S3, Redshift 등으로 저장
    • Glue 환경에서는 SparkSession을 직접 쓰기보다는, GlueContext를 통해 Glue 전용 기능과 Spark를 같이 다룸

    3. SparkContext (스파크 컨텍스트)

    - 클러스터 관리자

    - Spark 클러스터(= 여러 노드들)를 제어하고, 노드별로 작업을 분배함

    - SparkSession도 내부적으로 SparkContext를 사용

    - 즉, SparkContext는 SparkSession의 “하위 엔진”이에요.

     

    SparkSession DataFrame 연산 엔진 Glue 내부의 Spark 엔진 요리사
    GlueContext AWS Glue 전용 기능 관리 Glue Job의 Wrapper 매니저
    SparkContext 클러스터 제어 및 Job 분배 SparkSession 내부 엔진 주방 관리자

     

    4. DataFrame vs DynamicFrame?

    제공 주체 Apache Spark AWS Glue 전용
    데이터 구조 고정된 스키마 (엄격함) 유연한 스키마 (자동 처리)
    변환 시 장점 연산 속도 빠름, Spark 함수 다양 스키마 오류에 강함, JSON·S3 등 불완전 데이터 처리 유리
    변환 가능 여부 DynamicFrame → DataFrame / DataFrame → DynamicFrame 상호 변환 가능 O (toDF() / fromDF())
    주 사용 목적 복잡한 연산, ML, SQL 쿼리 등 Spark 처리 Glue ETL Job 내 데이터 변환 및 정제
    예시 함수 .filter(), .groupBy(), .join() 등 .apply_mapping(), .resolveChoice() 등

     

    - DataFrame

    -> Spark의 기본 데이터 구조로, 스키마 (컬럼 이름 + 타입)이 고정되어 있음

    -> 한번 정의된 스키마에 안 맞는 데이터가 들어오면 에러가 발생함

    -> 속도가 빠르고 Spark SQL을 그대로 쓸 수 있음

    df = spark.read.parquet("s3://bucket/path/") df.filter(df.age > 20).select("name", "age").show()

     

    - DynamicFrame

    -> Glue에서만 제공하는 특수한 구조

    -> 스키마가 유연해서 컬럼이 없거나 타입이 다른 데이터를 자동으로 정리해줌

    -> CSV, JSON, Parquet 등 형식이 섞인 데이터를 읽을 때 매우 편리

    -> Spark DataFrame보다 속도는 약간 느릴 수 있음

     

    dyf = glueContext.create_dynamic_frame.from_catalog( database="mydb", table_name="mytable" ) dyf = dyf.resolveChoice(specs=[("age", "cast:int")])

     

    - 실제 사용 예시

    # DynamicFrame → DataFrame : df = dyf.toDF()
    # DataFrame → DynamicFrame : dyf = DynamicFrame.fromDF(df, glueContext, "convert_df")
    • 읽기/쓰기 (S3, Glue Catalog 등): DynamicFrame
    • 가공/집계 (filter, join, groupBy 등): DataFrame
    • 저장 (S3, Redshift 등): 다시 DynamicFrame으로 변환

    '클라우드 > Data Engineering' 카테고리의 다른 글

    [Glue] 데이터 처리 개념 정리  (0) 2025.10.11
    [Glue] Glue 옵션 파헤치기  (0) 2025.08.12
Designed by Tistory.