본문 바로가기
빅데이터(Big Data)

모던 데이터 스택의 공용어, Apache Arrow에 대해 분석

by forward error correction Circle 2026. 5. 11.
반응형

Ⅰ. Apache Arrow 란?

 Apache Arrow는 2016년 Cloudera·Databricks·Dremio·MapR·Twitter·Salesforce 등 13개 오픈소스 프로젝트(Impala·Cassandra·Drill·HBase·Spark·Kudu·Pandas 등)의 핵심 개발자들이 "시스템마다 데이터를 직렬화(Serialize)·역직렬화(Deserialize)하는 데 전체 CPU의 70~80%를 쓰는 문제"를 해결하기 위해 공동 창립한 언어 중립(Language-Agnostic)·컬럼형(Columnar)·인메모리(In-Memory) 데이터 포맷과 분석 처리 라이브러리 모음입니다. "컴퓨터 메모리에 데이터가 있는 그 모양 그대로(Zero-Copy) 다른 시스템이 읽을 수 있다면, 변환 오버헤드 없이 CPU·GPU·FPGA가 SIMD 벡터 연산으로 즉시 처리할 수 있다"라는 발상에서 출발했습니다. Arrow는 단순 포맷(Format Specification)을 넘어 C++·Python(PyArrow)·Java·Go·Rust·JavaScript·Ruby·R·Julia·MATLAB·C#·Swift 등 13개 언어 공식 구현체, Arrow Flight(gRPC 고속 전송)·Arrow Flight SQL·ADBC(Arrow Database Connectivity)·Arrow DataFusion(Rust 쿼리 엔진)·Gandiva(LLVM 기반 표현식 컴파일러)·Acero(스트리밍 실행 엔진)까지 포함하는 거대한 데이터 표준 생태계로 자리잡았습니다. 2025~2026년 현재 Pandas 2.x·Polars·DuckDB·ClickHouse·Snowflake·BigQuery·Spark·Dask·Ray·Databricks·TensorFlow·PyTorch·HuggingFace Datasets·Parquet·ORC·Iceberg·Delta Lake까지 거의 모든 현대 데이터 도구가 Arrow를 내부 메모리 표준 또는 교환 포맷으로 채택하고 있습니다.

■ Row 포맷(JSON/CSV) vs Column 포맷(Arrow) vs Parquet 비교

비교 항목 Row 기반 (JSON/CSV) Apache Arrow (In-Memory) Apache Parquet (On-Disk)
저장 구조 행(Row) 단위 연속 배치 열(Column) 단위 연속 배치 열 단위 + Row Group 블록
주 용도 트랜잭션·로그 전송 인메모리 분석·IPC 디스크 장기 보관
직렬화 오버헤드 파싱·타입 변환 필수 Zero-Copy (파싱 0) Footer 메타만 파싱
SIMD 벡터화 사실상 불가 네이티브 지원 (AVX2/512) Decode 후 가능
압축 효율 낮음 (gzip 3~4x) 미압축 (메모리 상주) 높음 (Snappy/Zstd 5~10x)
언어 간 공유 문자열 변환 오버헤드 동일 버퍼 공유 (Zero-Copy) 파일 읽기 후 Arrow로 변환
예시 REST API, syslog, CSV Polars·DuckDB RecordBatch S3·HDFS 데이터 레이크
네트워크 전송 텍스트·JSON HTTP Arrow Flight (gRPC) 객체 스토리지 다운로드
표준화 주체 RFC·드라이버별 Apache Foundation Apache Foundation

Ⅱ. Apache Arrow 주요 특징

 ⅰ. 언어 중립적 컬럼 메모리 레이아웃

   : 동일한 int32·float64·string·list·struct 타입이 13개 언어에서 바이트 단위까지 동일하게 표현되어, C++에서 생성한 RecordBatch를 Python·Rust·Java가 메모리 포인터만 넘겨받아 즉시 해석할 수 있습니다.

 ⅱ. Zero-Copy IPC(프로세스 간 통신)

   : 프로세스 A가 생성한 Arrow 버퍼를 mmap·shared memory·Arrow IPC 스트림으로 공유하면, 프로세스 B는 복사·디코딩 없이 같은 메모리를 읽을 수 있어 Python ↔ Rust ↔ Java 간 통신 지연을 나노초 단위로 줄입니다.

 ⅲ. SIMD / 벡터화 연산 최적화

   : 64비트 정렬된 연속 메모리와 Null 비트맵 구조는 AVX2·AVX-512·NEON 같은 SIMD 명령어로 한 사이클에 8~16개 값을 동시에 연산하여, Pandas(NumPy)·CSV 대비 5~100배의 분석 속도를 달성합니다.

 ⅳ. Arrow Flight / Flight SQL 고속 전송

   : gRPC 기반 Arrow Flight는 Arrow RecordBatch를 TCP/로컬 네트워크로 초당 수 GB 이상 스트리밍하며, Flight SQL은 ODBC/JDBC를 대체하는 표준 쿼리 프로토콜로 응답 지연을 최대 20~50배 단축합니다.

 ⅴ. ADBC(Arrow Database Connectivity)

   : ODBC/JDBC 기반의 행 단위 변환 지옥을 끝내는 Arrow 네이티브 DB 드라이버 표준으로, Snowflake·Postgres·BigQuery·DuckDB·Redshift 등 10+ DB에서 쿼리 결과를 Arrow로 직접 수신합니다.

 ⅵ. Parquet / ORC / Feather 파일 포맷 연동

   : pyarrow.parquet·arrow-rs·parquet-cpp 공식 구현으로 Parquet·ORC·Feather·CSV·JSON을 Arrow Table로 즉시 읽어, 분석 파이프라인의 I/O 경계에서 단일 표준 객체를 사용합니다.

 ⅶ. DataFusion / Acero / Gandiva 실행 엔진

   : Rust 기반 DataFusion(SQL 쿼리 엔진), C++ Acero(스트리밍 실행 엔진), LLVM 기반 Gandiva(표현식 JIT 컴파일러)가 Arrow 위에 얹혀 ClickHouse급 컬럼형 쿼리 성능을 임베드 형태로 제공합니다.

 ⅷ. Dictionary / Run-End / List / Struct 풍부한 타입

   : 정수·부동소수·타임스탬프·Decimal·Dictionary(카테고리)·Run-End(연속 반복)·List·Map·Struct·Union까지 복합 타입을 표준 스펙으로 정의하여, JSON·Avro·Protobuf 수준의 표현력을 컬럼 포맷으로 확장합니다.

Ⅲ.  Apache Arrow 동작 방식

 Apache Arrow는 "컬럼형 메모리 버퍼 생성 → RecordBatch / Table 구성 → IPC / Flight로 공유 → 실행 엔진(Compute)이 SIMD 벡터 연산"의 파이프라인으로 동작합니다. 내부 동작을 10단계로 정리하면 다음과 같습니다.

 

ⅰ. Apache Arrow 내부 동작 파이프라인 (10단계)

단계 구분 동작상세  설명
1 메모리 할당
(Allocate)
Buffer 확보 MemoryPool이 64바이트 정렬(Aligned) 된 연속 메모리 영역을 할당하여 CPU 캐시라인 및 SIMD 벡터 연산 최적화를 수행
2 메모리 구조 Validity Bitmap NULL 여부를 1bit Bitmap 으로 저장하여 값 버퍼와 분리. 분기(Branch) 없는 벡터 연산과 Zero-Copy 처리를 가능하게 함
3 컬럼 배열
(Array)
Primitive Array Int32Array, Float64Array, TimestampArray 등의 기본 타입 컬럼을 다음 구조로 생성:

[Value Buffer + Validity Bitmap + Length]
4 복합 타입 Nested Array List, Struct, Map, Union 타입을 Child Array + Offset Buffer 조합으로 재귀 구성하여 JSON·Protobuf 수준의 복합 스키마 표현
5 묶음 구성
(Batch/Table)
RecordBatch 동일 Schema를 가진 여러 Array를 묶어 생성하는 열 기반 2차원 블록(Columnar Block). IPC/스트리밍의 최소 전송 단위
6 논리 테이블 Table / ChunkedArray 여러 RecordBatch를 수직 결합하여 논리 테이블 구성. 대용량 데이터는 ChunkedArray 기반으로 지연 로딩 및 병렬 스캔 수행
7 공유·전송
(IPC/Flight)
IPC Stream / File FlatBuffers Metadata + Raw Buffer 구조를 사용하여 mmap·파일·소켓 기반 Zero-Copy 공유 수행
8 네트워크 전송 Arrow Flight (gRPC) DoGet, DoPut, DoExchange RPC 기반 RecordBatch 스트리밍. TLS·인증·병렬 Endpoint 표준 지원
9 실행 엔진
(Compute)
Acero / DataFusion Filter, Project, Aggregate, Join, Sort 등을 SIMD 벡터 커널로 수행. Gandiva는 LLVM IR 기반 JIT 컴파일 수행
10 영속화
(Persist)
Parquet / Feather ZSTD, Snappy, Dictionary Encoding, RLE 등을 적용해 Parquet·Feather 파일 저장 후 재로드 시 Arrow 메모리 구조로 복원

Ⅳ. Apache Arrow 아키텍처 구성 및 흐름도

 ⅰ. Apache Arrow 전체 아키텍처

 ⅱ. 주요 구성 요소

구성 요소 역할 비고
Arrow Columnar Format 언어 중립 컬럼형 메모리 스펙(Buffer·Validity·Offset·Dictionary 배치 규칙) Apache 공식 스펙
Language Libraries C++·Python(PyArrow)·Java·Go·Rust(arrow-rs)·JS·R·Julia·C# 등 13개 공식 구현체 동일 바이트 레이아웃
Arrow IPC FlatBuffers 메타데이터 + 버퍼로 RecordBatch를 파일·스트림으로 직렬화하는 포맷 Feather v2 기반
Arrow Flight / Flight SQL gRPC 기반 고속 전송 프레임워크와 ODBC/JDBC를 대체하는 표준 SQL 프로토콜 TLS·인증 내장
ADBC (Database Connectivity) Arrow 네이티브 DB 드라이버 표준, 쿼리 결과를 Arrow RecordBatch로 직접 수신 ODBC 후속 표준
Compute Kernels SIMD 벡터화된 Filter·Sum·Mean·Sort·Join 등 수백 개의 Arrow 연산 커널 pyarrow.compute
DataFusion (Rust) Arrow 기반의 본격 SQL 쿼리 엔진, Parquet/ORC/CSV 소스 지원 + 분산 실행 Ballista 분산 엔진 포함
Acero / Gandiva C++ 스트리밍 실행 엔진(Acero)과 LLVM 기반 표현식 JIT 컴파일러(Gandiva) 임베디드 엔진
Parquet / Feather 통합 Parquet(디스크 영속)·Feather(빠른 IPC) 파일 포맷의 공식 Arrow 리더/라이터 ZSTD·Snappy 압축
생태계 연동 Pandas 2.x·Polars·DuckDB·Spark·Ray·HuggingFace Datasets·TensorFlow·PyTorch 사실상 업계 표준

Ⅴ. Apache Arrow 설치 방법

 Apache Arrow는 Python(PyArrow)·C++·Rust·Java·JavaScript 등 언어별로 별도 패키지가 제공됩니다. 실무에서 가장 많이 쓰이는 4가지 방법을 소개합니다.

ⅰ. Python(PyArrow) 설치 (가장 많이 사용)

# 1) 가상환경 준비 (Python 3.9~3.13)
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# 2) PyArrow 기본 설치 (Parquet·ADBC·Flight 포함 휠)
pip install --upgrade pip
pip install pyarrow

# 3) 선택: Arrow Flight / Flight SQL 추가 구성
pip install pyarrow[flight]

# 4) 선택: 빠른 설치(uv, Rust 기반)
pip install uv
uv pip install pyarrow

# 5) 버전 확인
python -c "import pyarrow; print(pyarrow.__version__)"

ⅱ. Conda / Mamba 설치 (데이터 과학 환경)

# 1) conda-forge 채널에서 설치 (네이티브 빌드 최적화)
conda install -c conda-forge pyarrow

# 2) 고성능 mamba 사용
mamba install -c conda-forge pyarrow

# 3) 추가 구성 요소 (compute·dataset·gandiva)
mamba install -c conda-forge pyarrow=15.* \
    python-duckdb polars pandas

# 4) Jupyter 커널에서 바로 확인
python -c "import pyarrow.compute as pc; print(pc.list_functions()[:10])"

ⅲ. Rust / C++ / Java 네이티브 설치

# [Rust] Cargo.toml
[dependencies]
arrow = "52"
arrow-flight = "52"
datafusion = "41"

# [C++] Ubuntu/Debian apt 저장소
sudo apt update
sudo apt install -y -V ca-certificates lsb-release wget
wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | \
  tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install -y -V ./apache-arrow-apt-source-latest-*.deb
sudo apt update
sudo apt install -y -V libarrow-dev libparquet-dev libarrow-flight-dev

# [Java] Maven pom.xml
<dependency>
  <groupId>org.apache.arrow</groupId>
  <artifactId>arrow-vector</artifactId>
  <version>17.0.0</version>
</dependency>

ⅳ. Docker / Dev Container 설치

# Dockerfile (PyArrow + DuckDB + Polars 분석 컨테이너)
FROM python:3.12-slim
RUN pip install --no-cache-dir \
    pyarrow duckdb polars pandas ipykernel
WORKDIR /work
CMD ["python", "-i"]

# 실행
docker build -t arrow-lab .
docker run --rm -it -v $(pwd):/work arrow-lab

# 공식 이미지 (Arrow 빌드 도구 포함, CI 용도)
docker pull apache/arrow-dev:amd64-ubuntu-22.04-python-3.12

# 설치 확인
python -c "import pyarrow as pa; print(pa.cpu_count(), pa.__version__)"

Ⅵ. Apache Arrow 사용 방법

 실무에서 가장 자주 쓰이는 다섯 가지 패턴 "Table · RecordBatch 생성", "Parquet 읽기·쓰기", "Pandas · Polars 상호 변환", "Compute 커널로 벡터 연산", "Arrow Flight 서버·클라이언트"를 살펴봅니다.

ⅰ. Arrow Table · RecordBatch 생성

import pyarrow as pa

# 1) 컬럼 단위 Array 생성
order_id = pa.array([1001, 1002, 1003, 1004], type=pa.int64())
amount   = pa.array([19800, 45000, None, 12500], type=pa.int32())
country  = pa.array(["KR", "KR", "JP", "US"], type=pa.string())

# 2) RecordBatch 구성 (IPC·Flight 전송 최소 단위)
batch = pa.RecordBatch.from_arrays(
    [order_id, amount, country],
    names=["order_id", "amount", "country"],
)
print(batch.schema)

# 3) Table(여러 RecordBatch)로 확장
table = pa.Table.from_batches([batch, batch])
print(table.num_rows, table.num_columns)    # 8, 3

ⅱ. Parquet · Feather 파일 읽기/쓰기

import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.feather as feather

# 1) Arrow Table → Parquet 저장 (ZSTD 압축)
pq.write_table(table, "orders.parquet", compression="zstd")

# 2) Parquet → Arrow Table 읽기 (특정 컬럼·Predicate Pushdown)
t = pq.read_table(
    "orders.parquet",
    columns=["order_id", "amount"],
    filters=[("country", "=", "KR")],
)

# 3) Feather v2 (빠른 IPC 포맷, 로컬 캐시)
feather.write_feather(table, "orders.arrow")
t2 = feather.read_table("orders.arrow")

# 4) 데이터셋 API (수천 Parquet 파일을 Lazy 쿼리)
import pyarrow.dataset as ds
dataset = ds.dataset("s3://lake/orders/", format="parquet")
scanner = dataset.scanner(columns=["amount", "country"],
    filter=ds.field("country") == "KR")
result = scanner.to_table()

ⅲ. Pandas · Polars · DuckDB 상호 변환 (Zero-Copy)

import pyarrow as pa
import pandas as pd
import polars as pl
import duckdb

# 1) Pandas DataFrame → Arrow Table
df = pd.DataFrame({"a": [1, 2, 3], "b": ["x", "y", "z"]})
tbl = pa.Table.from_pandas(df)

# 2) Arrow Table → Polars(Lazy·Zero-Copy)
plf = pl.from_arrow(tbl)

# 3) Arrow Table → DuckDB (SQL 실행, 복사 없이)
con = duckdb.connect()
con.register("orders", tbl)
print(con.sql("SELECT country, sum(amount) FROM orders GROUP BY 1").fetchall())

# 4) 반대 방향: DuckDB 쿼리 결과를 Arrow Table로 직접 받기
res = con.sql("SELECT * FROM orders").arrow()
print(type(res))   # pyarrow.Table

ⅳ. Compute 커널 (SIMD 벡터 연산)

import pyarrow as pa
import pyarrow.compute as pc

arr = pa.array([10, 20, None, 40, 50], type=pa.int64())

# 1) Null-Safe 합계·평균·최댓값 (SIMD 벡터화)
print(pc.sum(arr).as_py())    # 120
print(pc.mean(arr).as_py())   # 30.0

# 2) Filter / Take (벡터 분기)
mask = pc.greater(arr, pa.scalar(15))
print(pc.filter(arr, mask))   # [20, 40, 50]

# 3) Cast / Round / Date trunc
pc.cast(arr, pa.float32())
pc.round(pa.array([1.234, 5.678]), ndigits=1)

# 4) Group-By Aggregate (Table 단위)
t = pa.table({"c": ["KR","KR","JP"], "v": [1,2,3]})
print(t.group_by("c").aggregate([("v","sum")]))

ⅴ. Arrow Flight 서버·클라이언트 (고속 RPC)

# flight_server.py
import pyarrow as pa
import pyarrow.flight as flight

class EchoServer(flight.FlightServerBase):
    def __init__(self):
        super().__init__("grpc://0.0.0.0:8815")
        self.store = {}
    def do_put(self, ctx, descriptor, reader, writer):
        self.store[descriptor.path[0]] = reader.read_all()
    def do_get(self, ctx, ticket):
        return flight.RecordBatchStream(self.store[ticket.ticket.decode()])
EchoServer().serve()

# flight_client.py
import pyarrow as pa, pyarrow.flight as flight
client = flight.FlightClient("grpc://localhost:8815")
desc = flight.FlightDescriptor.for_path(b"orders")
tbl  = pa.table({"id":[1,2,3]})
writer, _ = client.do_put(desc, tbl.schema)
writer.write_table(tbl); writer.close()
reader = client.do_get(flight.Ticket(b"orders"))
print(reader.read_all())

Ⅶ. Apache Arrow 자주 쓰는 명령어

 Apache Arrow는 라이브러리 성격이 강하지만, 실무에서는 pyarrow CLI · parquet-tools · arrow-cli(Rust) · flight-sql-client 등 CLI 도구와 함께 자주 사용됩니다. 아래는 가장 많이 쓰이는 명령·함수·옵션 모음입니다.

분류 명령 / 함수 설명
설치 확인 python -c "import pyarrow as pa; print(pa.__version__)" PyArrow 버전·빌드 옵션 확인
CPU 자원 pa.cpu_count() / pa.set_cpu_count(n) Arrow Compute 스레드 수 조회·변경
스키마 pa.schema([("id", pa.int64()), ("name", pa.string())]) 컬럼 이름·타입·메타데이터 정의
Array 생성 pa.array([1, 2, None], type=pa.int32()) Null-aware 컬럼 배열 생성
Table pa.table({"id":[...], "name":[...]}) 딕셔너리·컬럼 리스트로 Table 생성
Parquet 쓰기 pq.write_table(tbl, "a.parquet", compression="zstd") Parquet 파일 저장 (ZSTD/Snappy/Gzip)
Parquet 읽기 pq.read_table("a.parquet", columns=[...], filters=[...]) 컬럼·필터 푸시다운으로 효율 스캔
Dataset API ds.dataset("s3://bucket/", format="parquet") 파티션·멀티파일 Lazy 데이터셋 구성
Pandas 연동 pa.Table.from_pandas(df) / tbl.to_pandas() Pandas ↔ Arrow Zero-Copy 변환
Polars 연동 pl.from_arrow(tbl) / pl_df.to_arrow() Polars 와 상호 변환
Compute pc.sum / pc.mean / pc.filter / pc.sort_indices SIMD 벡터화 Aggregate·Filter·Sort
Group By tbl.group_by("c").aggregate([("v","sum")]) Table 수준 그룹 집계
IPC Write pa.ipc.new_file(sink, schema).write_table(tbl) Arrow IPC 파일(.arrow) 저장
IPC Read pa.ipc.open_file("a.arrow").read_all() Arrow IPC 파일 mmap Zero-Copy 로드
Feather feather.write_feather(tbl, "a.arrow") 빠른 로컬 캐시용 Feather v2 저장
Flight 서버 flight.FlightServerBase(location="grpc://...") gRPC Arrow 전송 서버 구동
Flight 클라이언트 flight.FlightClient("grpc://host:8815") do_get / do_put / do_exchange 호출
ADBC 연결 adbc_driver_postgresql.dbapi.connect(uri) Arrow 네이티브 DB 드라이버로 결과를 Arrow 로 수신
메모리 풀 pa.default_memory_pool().bytes_allocated() 현재 Arrow 메모리 사용량 모니터링
parquet-tools parquet-tools schema / meta / head a.parquet CLI로 Parquet 스키마·메타·샘플 확인
flight-sql-client flight_sql_client --host host --port 31337 --query "..." Flight SQL 서버로 CLI 쿼리 실행

Ⅷ. Apache Arrow 활용 방안

 Apache Arrow는 "어떤 언어·어떤 엔진이 처리하든 동일한 모양의 데이터를 공유한다"는 단 하나의 목표로 모던 데이터 스택의 허리 역할을 담당합니다. 2025~2026년 실무에서 가장 효과적인 활용 8가지 시나리오를 정리했습니다.

활용 분야 시나리오 적용 효과 대표 사례
데이터 레이크 Parquet + Iceberg + Arrow 파이프라인 S3/HDFS 의 Parquet 파일을 Arrow Dataset 으로 Lazy 스캔하며, Iceberg·Delta Lake 메타데이터와 결합해 수백 TB 테이블을 초 단위로 필터 · 집계합니다. Netflix, Airbnb, Stripe, 쿠팡
DB ↔ Python 고속 연동 ADBC + Flight SQL 로 ODBC 대체 Snowflake · BigQuery · DuckDB 의 쿼리 결과를 Arrow RecordBatch 로 직접 받아 ODBC/JDBC 대비 20~50배 응답 속도를 달성하고, 타입 변환 버그를 근본적으로 제거합니다. Snowflake, BigQuery, DuckDB Labs
분석 워크벤치 Polars · DuckDB · Pandas 2.x 백엔드 Polars·DuckDB·Pandas 2 모두 내부 메모리 표현을 Arrow 로 통일하여, pl.DataFrame ↔ pa.Table ↔ duckdb.relation 간 Zero-Copy 공유로 메모리를 절반 이하로 절감합니다. Polars Labs, DuckDB, Posit(R)
머신러닝 HuggingFace Datasets · Ray Data 학습셋 수백 GB 학습 데이터를 Arrow 컬럼 포맷으로 mmap 스트리밍하여 GPU 학습 중 CPU I/O 병목을 제거하고, TensorFlow · PyTorch DataLoader 로 직접 넘겨 처리량을 2~5배 향상시킵니다. HuggingFace, Ray, PyTorch Lightning
실시간 분석 Flight RPC 기반 분석 API gRPC Arrow Flight 서버를 구축해 대시보드·BI 도구가 RecordBatch 를 직접 스트리밍 수신하게 하여, REST+JSON 대비 응답 시간을 한 자릿수 ms 로 낮추고 네트워크 대역폭을 50% 이상 절감합니다. InfluxData, Dremio, Voltron Data
임베디드 SQL DataFusion · Acero · Gandiva 내장 Rust 기반 DataFusion 을 서비스에 임베드해 ClickHouse 급 컬럼형 SQL 성능을 작은 바이너리로 제공하고, Gandiva JIT 로 표현식 평가 속도를 10배 이상 끌어올립니다. InfluxDB IOx, Ballista, GreptimeDB
다언어 폴리글랏 Python ↔ Rust ↔
Java 공유 메모리
PyO3 Rust 확장에서 생성한 Arrow 배열을 Python 이 복사 없이 수신하고, JNI 경유로 Java Spark 에도 그대로 전달하여 멀티 런타임 파이프라인의 직렬화 오버헤드를 제거합니다. PyO3, Apache Spark, Trino
GPU 가속 RAPIDS cuDF · NVIDIA GPU 연동 NVIDIA RAPIDS cuDF 는 Arrow 호환 GPU 메모리 포맷을 사용하여 Arrow Table 을 CPU → GPU 로 Zero-Copy 로 올리고, 조인·그룹 집계를 CUDA 커널로 100배 이상 가속합니다. NVIDIA RAPIDS, BlazingSQL, 

 

반응형