15분
Built-in 함수로 안 될 때
Day 4: Python 함수를 Spark에서 쓰고 싶은데
Built-in 함수로 안 될 때
Apache Spark: 대용량 데이터 처리의 시작 > 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배 느릴 수 있다.
오늘 배울 것
- Python UDF - 기본, 느리지만 간단
- Pandas UDF - 벡터화로 10배 빠름
- 언제 뭘 쓸까? - 올바른 선택 기준
UDF는 최후의 수단이지만, 알면 강력한 무기가 된다.