15

Built-in 함수로 안 될 때

Day 4: Python 함수를 Spark에서 쓰고 싶은데

학습 목표

UDF가 필요한 상황을 이해한다 Python UDF의 한계를 인식한다

"이거 Built-in으로 어떻게 해요?"

어느 날, 이상한 요구사항이 왔다.

"사업자등록번호 형식 검증 좀 해줘. 123-45-67890 이런 형식이어야 해."

Spark Built-in 함수를 뒤졌다. regexp_extract, like, rlike... 정규식으로 할 수는 있는데...

검증 로직이 복잡하다:

  • 형식 체크 (###-##-#####)
  • 체크섬 검증 (사업자번호 검증 알고리즘)
  • 폐업 여부 API 호출

이건 Python 함수로 짜는 게 맞다.


UDF (User Defined Function)

내가 만든 Python 함수를 Spark에서 쓸 수 있다!

에디터 로딩 중...

편리하다!


그런데... 느리다

에디터 로딩 중...

문제:

  • 데이터가 JVM ↔ Python을 왕복
  • 직렬화/역직렬화 오버헤드
  • Catalyst 최적화 불가

결과: Built-in 함수보다 10~100배 느릴 수 있다.


오늘 배울 것

  1. Python UDF - 기본, 느리지만 간단
  2. Pandas UDF - 벡터화로 10배 빠름
  3. 언제 뭘 쓸까? - 올바른 선택 기준

UDF는 최후의 수단이지만, 알면 강력한 무기가 된다.