파이썬 & 오픈소스 개발 Tip과 강좌

이곳은 파이썬과 여러 오픈소스 기반 프레임워크 관련 Tip과 강좌 게시판 입니다. 관련 개발을 진행하면서 알아내신 Tip이나 강좌와 새로운 소식을 적어 주시면 다른 공부하는 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.

일반 Apache Arrow 리뷰

코난(김대우) 2021.10.05 17:22 Views : 29

Apache Arrow 리뷰

Spark을 보면서 몇번 나온 Apache Arrow를 잠시 시간 내어 정리.

 

- Apache Arrow란 무엇인가?

- Arrow를 어떤 용도로 사용하는가?

- Arrow가 저장되는 구조

- Python으로 Arrow 적용

 

Apache Arrow란 무엇인가?

Apache Arrow는 프로그래밍 언어 독립적인 컬럼기반(Columnar) 메모리 포맷으로, 테이블 구조 데이터와 계층형 데이터를 정의하며, CPU나 GPU 등 현대적인 하드웨어에서 효율적인 분석 작업을 목표.

Apache Arrow defines a language-independent columnar memory format for flat and hierarchical data, organized for efficient analytic operations on modern hardware like CPUs and GPUs.

Apache Arrow | Apache Arrow

 

주의 깊게 볼 부분으로 columnar 메모리 포맷 부분이다. 일반적으로 우리가 사용하는 columnar 데이터베이스와 구조와 마찬가지로, 통계적인 집계나 대규모 컬럼의 데이터에 대한 처리에 적합한 메모리 구조로, 태생부터 대용량 데이터 처리를 목표로 생긴 녀석이라고 보면 이후 과정이 쉽게 이해되었다.

 

Introduction-to-Apache-Arrow.png

출처 : Apache Arrow Tutorial for Beginners - Tutorial And Example

 

추가적으로, "프로그래밍 언어 독립적"에서 보는 것처럼, C나C++부터 JAVA, Python, 등의 거의 대부분 언어를 지원해 Client SDK를 이용해 손쉬운 개발이 가능하고, Columnar 유관 여러 플랫폼이나 서비스에서 거의 모두 호환된다.

바꿔 말하자면, Arrow 포맷만 지원하면, 데이터 변환을 할 필요가 없다. 특히 대규모 데이터 분석 작업에서 변환 문제만 해결되어도 많은 시간을 절약할 수 있다.

 

Arrow를 어떤 용도로 사용하는가?

위의 포맷에서 유추할 수 있는 것처럼 대부분의 분석 서비스나 Columnar 기반 서비스, 플랫폼에서 이용 가능하다.

조금 더 use case를 살펴보면, 아래와 같다.

- SQL execution engines (like Drill and Impala)
- Data analysis systems (as such Pandas and Spark)
- Streaming and queuing systems (like as Kafka and Storm)
- Storage systems (like Parquet, Kudu, Cassandra, and HBase).

 

특히, Apache Spark의 성장과 함께, Arrow 역시 많은 성장을 했으며, Spark의 데이터셋으로 in-memory 대규모 데이터 처리에서 사용된다.

 

Arrow가 저장되는 구조

Arrow에 대해서 어느정도 사용성에 대해서 이해되었다.

그렇다면, Arrow는 어떤 구조로 "in-memory columnar" 구조를 가지고 사용되는 것일까?

아래의 Arrow memory buffer 구조 이미지를 참고하면 도움이 될 것이다.

arrow-memory.png

 

Memory의 IO를 줄이고 분석 처리시 높은 성능을 끌어낼 수 있다.

대부분의 OLTP 시스템과 같이 row 기반 작업이 아닌, OLAP이나 분석 서비스는 fact 테이블 등에 대해서 full scan하여 집계된 결과를 BI로 이용하게 된다. 예를 들어, "지난 5년간 전체 매출을 지역별, 지점별로 grouping 해서 결과를 보여줘" 라는 처리이다. 이러한 대규모 데이터 분석 과정에서 좋은 효과를 얻을 수 있다.

 

참고링크 : Arrow Columnar Format — Apache Arrow v5.0.0

 

Python으로 Arrow 적용

간략히, Python으로 처리 예제 코드

# install pyarrow
# conda install -c conda-forge pyarrow
# or pip install pyarrow

# Converting Pandas Dataframe to Apache Arrow Table
import numpy as np
import pandas as pd
import pyarrow as pa

df = pd.DataFrame({'one': [20, np.nan, 2.5],'two': ['january', 'february', 'march'],'three': [True, False, True]},index=list('abc'))
table = pa.Table.from_pandas(df)

# Pyarrow Table to Pandas Data Frame
df_new = table.to_pandas()

 

관련자료 링크 : A gentle introduction to Apache Arrow with Apache Spark and Pandas | by Antonio Cachuan | Towards Data Science

 

PyArrow 관련 추가 리뷰 notebook은 CloudBreadPaPa/pyspark-basic: pyspark basic self-study repo (github.com) 링크에서 확인 가능

 

참고링크

Apache Arrow Tutorial for Beginners - Tutorial And Example

Apache Arrow in PySpark — PySpark 3.1.2 documentation

PySpark Usage Guide for Pandas with Apache Arrow - Spark 3.0.1 Documentation

 

 

 

No. Subject Author Date Views
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 549
109 embedded SQL - GlueSQL, rust 기반 오픈소스 프로젝트 file 코난(김대우) 2021.10.22 8
108 대규모 머신러닝 프로젝트 Serving에 사용되는 Python WAS, ASGI - uvicorn file 코난(김대우) 2021.10.06 41
» Apache Arrow 리뷰 file 코난(김대우) 2021.10.05 29
106 autopep8을 이용한 python 린트(linting) 구현 코난(김대우) 2021.09.15 38
105 Python에서 환경변수(environment variable) 처리 코난(김대우) 2021.09.15 31
104 Python에서 random 문자열이나 숫자 가져오는 방법 코난(김대우) 2021.09.15 35
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 326
102 Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 180
101 Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 206
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 216
99 Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 116
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 63
97 Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 77
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 103
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 141
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패드워드) 관리 - dotenv 코난(김대우) 2021.01.02 98
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 72
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 165
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 184
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 67





XE Login