주요 컨텐츠로 이동

Python 사용자 정의 테이블 함수(UDTFs) 소개

Python 사용자 정의 테이블 함수(UDTF)의 정의, 중요성 및 사용법

pyhton

Published: November 7, 2023

데이터 엔지니어링2분 소요

Apache Spark™ 3.5와 Databricks Runtime 14.0에서 Python 사용자 정의 테이블 함수(UDTF)라는 흥미로운 기능이 도입되었습니다. 이 블로그 게시물에서는 UDTF가 무엇이며, 왜 강력하고, 어떻게 사용할 수 있는지 자세히 살펴보겠습니다.

Python 사용자 정의 테이블 함수(UDTF)란 무엇인가요?

Python 사용자 정의 테이블 함수(UDTF)는 단일 스칼라 결과값 대신 테이블을 출력으로 반환하는 새로운 종류의 함수입니다. 등록되면 SQL query의 FROM 절에 표시될 수 있습니다.

각 Python UDTF는 0개 이상의 인수를 허용하며, 각 인수는 정수 또는 문자열과 같은 상수 스칼라 값일 수 있습니다. 함수 본문에서는 이러한 인수의 값을 검사하여 반환할 데이터를 결정할 수 있습니다.

Python UDTF를 사용해야 하는 이유

간단히 말해, 여러 행과 열을 생성하고 풍부한 Python 에코시스템을 활용하려는 함수를 원한다면 Python UDTF가 적합합니다.

Python UDTF와 Python UDF 비교

Spark의 Python UDF는 각각 0개 이상의 스칼라 값을 입력으로 받고 단일 값을 출력으로 반환하도록 설계되었지만, UDTF는 더 많은 유연성을 제공합니다. 여러 행과 열을 반환하여 UDF의 기능을 확장할 수 있습니다.

Python UDTF vs SQL UDTF

SQL UDTF는 효율적이고 다재다능하지만 Python은 더 풍부한 라이브러리 및 도구 세트를 제공합니다. 통계 함수나 machine learning 추론과 같은 고급 기술이 필요한 변환 또는 계산의 경우 Python이 뛰어납니다.

Python UDTF 생성 방법

기본적인 Python UDTF를 살펴봅시다.

위 코드에서는 두 개의 정수를 입력으로 받아 원래 숫자와 그 제곱이라는 두 개의 열을 출력으로 생성하는 간단한 UDTF를 만들었습니다.

UDTF를 구현하는 첫 번째 단계는 클래스를 정의하는 것입니다. 이 경우에는 다음과 같습니다.

다음으로 UDTF의 eval 메서드를 구현해야 합니다. 이것은 계산을 수행하고 행을 반환하는 메서드로, 여기에서 함수의 입력 인수를 정의합니다.

yield 문의 사용에 주목하세요. Python UDTF는 결과를 제대로 처리할 수 있도록 반환 유형이 튜플 또는 Row 객체여야 합니다.

마지막으로, 클래스를 UDTF로 표시하기 위해 @udtf 데코레이터를 사용하고 UDTF의 반환 유형을 정의할 수 있습니다. 참고로 반환 유형은 블록 서식이 지정된 StructType이거나 Spark에서 블록 서식이 지정된 StructType을 나타내는 DDL 문자열이어야 합니다.

Python UDTF 사용 방법

Python에서

클래스 이름을 사용하여 UDTF를 직접 호출할 수 있습니다.

SQL에서

먼저 Python UDTF를 등록합니다.

그런 다음 SQL에서 query의 FROM 절에 테이블 반환 함수로 사용할 수 있습니다.

Arrow에 최적화된 Python UDTF

Apache Arrow는 Java와 Python 프로세스 간의 효율적인 데이터 전송을 가능하게 하는 인메모리 컬럼형 데이터 형식입니다. UDTF가 많은 행을 출력할 때 성능을 크게 향상시킬 수 있습니다. useArrow=True를 사용하여 Arrow 최적화를 활성화할 수 있습니다.

LangChain을 사용한 실제 사용 사례

위 예시는 간단해 보일 수 있습니다. Python UDTF를 LangChain과 통합하는 재미있는 예시를 통해 더 자세히 알아봅시다.

이제 UDTF를 호출할 수 있습니다.

지금 바로 Python UDTF를 시작해 보세요

복잡한 데이터 변환을 수행하거나 데이터세트를 보강하거나 단순히 데이터를 분석하는 새로운 방법을 모색하려는 경우, Python UDTF는 여러분의 툴킷에 유용한 추가 기능입니다. 자세한 내용은 이 노트북 을 사용해 보거나 설명서를 참조하세요.

향후 작업

이 기능은 Python UDTF 플랫폼의 시작에 불과합니다. 향후 릴리스에서 사용할 수 있도록 Apache Spark에서 더 많은 기능이 현재 개발 중입니다. 예를 들어 다음을 지원할 수 있게 됩니다.

  • UDTF 호출이 각 호출에 제공된 특정 인수(제공된 입력 인수의 유형 및 리터럴 스칼라 인수의 값 포함)에 따라 출력 스키마를 동적으로 compute할 수 있는 다형성 분석입니다.
  • TABLE 키워드를 사용하여 SQL FROM 절의 UDTF 호출에 전체 입력 관계를 전달합니다. 이는 직접적인 카탈로그 테이블 참조뿐만 아니라 임의의 테이블 하위 쿼리에서도 작동합니다. 각 query에서 입력 테이블의 사용자 지정 파티셔닝을 지정하여, eval 메서드 내에서 동일한 UDTF 클래스 인스턴스가 입력 테이블의 어떤 행 하위 집합을 사용할지 정의할 수 있게 됩니다.
  • query 예약 시간에 UDTF 호출에 대한 임의의 초기화를 한 번만 수행하고, 나중에 사용할 수 있도록 해당 상태를 모든 향후 클래스 인스턴스에 전파합니다. 이는 초기 정적 'analyze' 메서드가 반환하는 UDTF 출력 테이블 스키마가 동일한 query에 대한 모든 향후 __init__ 호출에서 사용될 수 있음을 의미합니다.
  • 더 많은 흥미로운 기능이 있습니다!

 

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요