Python의 단순함으로 사용자 지정 데이터 연결을 활용해 보세요
작성자: Allison Wang, Jules Damji, 라이언 닌하우스 , Huanli Wang
Databricks Runtime(DBR) 15.4 LTS 이상에서 실행되는 Apache Spark™ 4.0용 PySpark의 데이터 소스 API가 정식 출시(GA)되었음을 알려드리게 되어 기쁩니다. 이 강력한 기능은 개발자가 순수 Python을 사용하여 Spark로 사용자 지정 데이터 커넥터를 빌드할 수 있도록 지원합니다. 외부 및 Spark 네이티브가 아닌 데이터 소스와의 통합을 간소화하여 데이터 파이프라인 및 머신러닝 워크플로에 새로운 가능성을 열어줍니다.
오늘날 데이터는 정형, 비정형, 그리고 이미지와 동영상과 같은 멀티모달 데이터 등 다양한 소스에서 수집됩니다. Spark는 Delta, Iceberg, Parquet, JSON, CSV, JDBC와 같은 데이터 소스 v1(DSv1) 및 데이터 소스 v2(DSv2) 표준 형식을 기본적으로 지원합니다. 하지만 Google Sheets, REST API, HuggingFace 데이터 세트, X의 트윗 또는 독점적인 내부 시스템과 같은 다른 많은 소스에 대한 내장 지원은 제공하지 않습니다. DSv1/DSv2를 기술적으로 확장 하여 이러한 소스를 구현할 수는 있지만, 경량 사용 사례의 경우 그 과정이 지나치게 복잡하고 불필요한 경우가 많습니다.
사용 사례를 위해 다른 맞춤형 데이터 소스에서 읽거나 써야 하는 경우, 또는 머신 러닝 사용 사례를 위한 ETL 파이프라인에서 모델 학습을 위해 이 데이터를 사용해야 하는 경우는 어떻게 해야 할까요? Python 데이터 소스 API가 바로 이러한 격차를 해소합니다.
이 블로그에서는 PySpark에서 사용자 지정 데이터 소스를 작성하는 방법을 살펴봅니다. 이 API를 사용하면 특정 사용 사례에 맞게 Spark에 내장되지 않은 다양한 데이터 세트를 데이터 처리 파이프라인으로 쉽게 가져올 수 있습니다. 또한 사용자 지정 데이터 소스의 몇 가지 예시도 살펴볼 것입니다. 하지만 먼저 그 이유와 내용에 대해 알아보겠습니다.
Python으로 작성하는 것에 대한 사람들의 애정과 pip를 통해 패키지를 쉽게 설치할 수 있다는 점에서 영감을 받은 Python 데이터 소스 API는 Python을 사용하여 Spark용 맞춤형 리더 및 라이터를 쉽게 빌드할 수 있게 해줍니다. 이 API는 모든 데이터 소스에 대한 액세스를 지원하므로, 이전에는 맞춤형 커넥터에 필요했던 복잡한 DSv1 및 DSv2 개발이나 Spark 내부에 대한 지식이 필요하지 않습니다.

Python 데이터 소스를 사용하면 몇 가지 주요 이점이 있습니다.
Pythonic한 느낌을 먼저 고려하세요. Python 데이터 소스 API는 더 복잡한 JVM 기반 커넥터 개발의 장벽을 제거합니다. Python에서 수많은 데이터 소스를 사용하여 복잡한 ETL 파이프라인을 구축하는 데이터 엔지니어는 이제 Spark의 내부 복잡성에 대해 깊이 파고들지 않고도 기존 Python 기술을 활용하여 맞춤형 커넥터를 만들 수 있습니다.
API는 배치 및 스트리밍 읽기를 모두 지원하므로 여러 데이터 액세스 패턴을 처리하는 커넥터를 빌드할 수 있습니다.
Spark SQL에서 지원되는 모든 데이터 소스와 마찬가지로 사용자 지정 Python 데이터 소스에도 Spark SQL을 통해 동일하게 쉽게 액세스할 수 있습니다. 데이터 소스가 DataFrame으로 로드되면 임시 뷰 또는 영구적인 Unity Catalog 관리형 테이블로 저장할 수 있습니다. 이를 통해 다운스트림 SQL 분석에 사용자 지정 데이터 소스를 통합할 수 있습니다.
DataFrame API를 사용하여 API 키, 엔드포인트 또는 기타 구성과 같은 맞춤형 옵션을 전달함으로써 외부 시스템에 쉽게 연결할 수 있습니다. 이를 통해 커넥터의 작동 방식을 완전히 제어할 수 있습니다. 자세한 내용은 아래의 실제 사례를 참조하세요.
미리보기 출시 이후 커뮤니티는 이미 Python 데이터 소스 API를 사용하여 가치 있는 커넥터를 구축하기 시작했습니다.
Python 데이터 소스 API는 사용 편의성뿐만 아니라 속도도 고려하여 설계되었습니다. 빠른 데이터 처리에 최적화된 인메모리 데이터 형식인 Apache Arrow를 기반으로 구축되었습니다. 이는 사용자 지정 커넥터와 Spark 간에 데이터를 최소한의 오버헤드로 이동할 수 있어 수집 및 쓰기 속도가 훨씬 빨라진다는 것을 의미합니다.
Python 데이터 소스를 사용하여 파이프라인에 데이터를 공급하는 실제 사용 사례를 살펴보겠습니다.
먼저 REST API를 통합하여 얻을 수 있는 이점을 살펴보겠습니다.
많은 데이터 엔지니어링 팀이 REST API에서 데이터를 가져와 다운스트림 변환에 사용하기 위해 사용자 지정 커넥터를 구축하고 있습니다. 데이터를 가져와 디스크나 메모리에 저장한 다음 Spark에 로드하기 위해 사용자 지정 코드를 작성하는 대신, Python 데이터 소스 API를 사용하여 이러한 단계를 건너뛸 수 있습니다.