IT용어위키


아파치 스파크 DStream transform

DStream의 transform 연산은 각 배치 간격마다 생성되는 RDD에 대해 직접적인 RDD 연산을 적용할 수 있게 해주는 고급 연산이다. DStream API의 고수준 추상화(map, reduceByKey 등)로는 처리할 수 없는 복잡한 연산이나 외부 RDD와의 연산을 가능하게 한다.

개념

  • transform 연산은 DStream 내부의 RDD를 직접 받아서 처리할 수 있는 유일한 API다
  • 즉, 각 배치 시점마다 다음과 같은 방식으로 동작:
    • rdd → func(rdd) 를 수행한 결과로 새로운 RDD를 생성
  • 외부의 정적 RDD와 조인하거나, Spark SQL처럼 DStream 이외의 기능을 결합할 때 유용함

문법

new_dstream = original_dstream.transform(lambda rdd: some_operation(rdd))

예시 1: 외부 RDD와의 조인

# 정적 사용자 정보 RDD
user_info = sc.parallelize([("user1", "Alice"), ("user2", "Bob")])

# DStream: (user_id, event)
events = ssc.socketTextStream("localhost", 9999) \
             .map(lambda line: line.split(",")) \
             .map(lambda fields: (fields[0], fields[1]))

# 조인 연산
joined = events.transform(lambda rdd: rdd.join(user_info))

예시 2: DStream 내 RDD를 동적으로 필터링

def dynamic_filter(rdd):
    blacklist = ["error", "fail", "unauthorized"]
    return rdd.filter(lambda word: word not in blacklist)

filtered = word_dstream.transform(dynamic_filter)

특징

  • 고급 사용자 정의 로직 삽입 가능
  • 정적 RDD 또는 외부 DB, 캐시 등과 통합 가능
  • map, flatMap 등 기본 연산보다 자유도 높음

주의사항

  • transform 함수 내부에서는 반드시 RDD 연산만 사용해야 하며, DStream 연산은 사용 불가
  • 외부 리소스에 접근할 경우 성능 및 안정성을 고려해 캐싱, 브로드캐스트 등의 전략 필요
  • 디버깅이 어렵기 때문에 체크포인팅과 로그 추적이 중요함

같이 보기

참고 문헌


  출처: IT위키 (IT위키에서 최신 문서 보기)

  * 본 페이지는 IT Wiki에서 미러링된 페이지입니다. 일부 오류나 표현의 누락이 있을 수 있습니다. 원본 문서는 IT Wiki에서 확인하세요!