parquet 파일의 열(column) 추출 방법 알아보기

이번 포스팅에서는 파이썬으로 parquet 파일의 특정 열(column) 추출 방법에 대해서 알아 보겠습니다.
parquet 파일에 대한 자세한 설명은 parquet 파일 형식 알아보기 포스팅을 참고하시면 됩니다.
parquet 파일 형식에서 특정 열만 추출하는 작업은 빅데이터 분석 과정의 첫번째 전처리 과정이라 할 수 있습니다.

전체 컬럼을 모두 추출하는 방법, 소수의 특정 열만 추출하는 방법과 다수의 특정 열을 추출하는 방법에 대해서 알아 보겠습니다.
예제 데이터는 빅데이터 실습을 위한 fake data 생성 포스팅에서 생성한 데이터(“빅데이터처리 실습용 Fake Data.csv”)를 활용하겠습니다.

parquet 파일의 모든 컬럼 추출하기

# 필요 라이브러리 불러오기 
import pandas as pd
import pyarrow as py
import pyarrow.parquet as pq

# parquet 파일을 메모리에 로딩하여 fakeBigData 객체에 저장
fakeBigData = pd.read_parquet('D:/fakeData.parquet')
fakeBigData.head()
-----------------------------------------------------------
Unnamed: 
         0	date	    name	            email	                text	                                            cardamt	address	                                    country
0	     0	2012-06-20	Kim Johns	        cdavis@example.org	    Mean say every add on democratic.\nMrs add som...	79626	USNV Williams\nFPO AE 19577	                Guadeloupe
1	     1	2023-05-06	Clarence Robertson	wfrazier@example.org	Sign opportunity radio almost hope color. Deca...	34372	144 Phillips Corner\nBernardbury, AK 53136	South Africa
2	     2	1980-06-16	Christopher Moore	yolandadean@example.net	Stay listen guess discussion guess. Explain st...	22185	USS Brown\nFPO AE 84150	Syrian Arab         Republic
3	     3	2009-08-18	Joseph Myers	    qlin@example.com	    Bed expert site big current. Appear single cre...	31802	104 James Knolls\nWest Jonathan, OR 55815	Namibia
4	     4	1982-01-08	Michael David	    amanda55@example.org	Join hundred at small experience. Surface natu...	92346	867 Hensley Forest\nAdamfurt, WA 80060	    Iceland

데이터프레임 형태로 메모리에 잘 로딩된 것을 확인할 수 있습니다.
fakeBigData 객체가 메모리를 얼마나 사용하고 있는 지, 데이터프레임의 행과 열의 수는 몇 개인지 확인해 보겠습니다.

# fakeData 객체에 대한 정보 확인하기
fakeBigData.info(memory_usage = 'deep')

--------------------------------------------

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500000 entries, 0 to 499999
Data columns (total 8 columns):
 #   Column      Non-Null Count   Dtype 
---  ------      --------------   ----- 
 0   Unnamed: 0  500000 non-null  int64 
 1   date        500000 non-null  object
 2   name        500000 non-null  object
 3   email       500000 non-null  object
 4   text        500000 non-null  object
 5   cardamt     500000 non-null  int64 
 6   address     500000 non-null  object
 7   country     500000 non-null  object
dtypes: int64(2), object(6)
memory usage: 288.0 MB

fakeData 객체가 차지하는 메모리 용량은 288.0 MB입니다(memory usage: 288.0 MB).
데이터 행의 건수는 50만 건이고(RangeIndex: 500000 entries, 0 to 499999), 컬럼 수는 8개(Data columns (total 8 columns)) 입니다.

만약, 데이터가 50만 건보다 훨씬 많은 500만 건, 5000만 건을 넘는다면?
그리고, 만약 컬럼 수가 8개 보다 많은 8000개 정도 된다면, 이 모든 데이터를 메모리에 올리는 것이 가능할까요? 불가능합니다.

하지만, 실제 빅데이터 분석을 하다 보면, 행과 열의 수가 엄청나게 많습니다.
이런 빅데이터를 분석하려면, 메모리에 모든 데이터를 업로드 하는 것이 아니라, 필요한 칼럼만 메모리에 로드하여 분석하는 방법을 알아야 합니다.

paruet 파일에서 특정 열(column)만 추출하는 방법에 대해서 알아 보겠습니다.


parquet 파일의 특정 열 추출하기

# 필요 라이브러리 불러오기 
import pandas as pd
import pyarrow as py
import pyarrow.parquet as pq

# fakeData.parquet 파일에서 name과 cardamt 열 추출하기
fakeBigDataSub = pd.read_parquet('D:/fakeData.parquet', columns = ['name','cardamt'])
fakeBigDataSub.head()
-----------------------------------------------------------------------------------------
    name	            cardamt
0	Kim Johns	        79626
1	Clarence Robertson	34372
2	Christopher Moore	22185
3	Joseph Myers	    31802
4	Michael David	    92346

위의 코드에서 처럼, pandas 라이브러리의 read_parquet 함수에 columns 옵션을 사용하여 추출을 원하고자 하는 컬럼명을 리스트로 작성하면 됩니다. 메모리 사용량을 살펴 보겠습니다.

fakeBigDataSub.info(memory_usage = 'deep')
------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500000 entries, 0 to 499999
Data columns (total 2 columns):
 #   Column   Non-Null Count   Dtype 
---  ------   --------------   ----- 
 0   name     500000 non-null  object
 1   cardamt  500000 non-null  int64 
dtypes: int64(1), object(1)
memory usage: 37.3 MB

메모리 사용량이 288.0MB에서 37.3 MB로 무려 87% 감소하였습니다. 만약, 전체 칼럼의 개수가 8,000개 이고, 이 중에서 800개의 열이 필요하다면, 어떻게 해야 할까요? 800개의 컬럼을 모두 columns 옵션에 리스트로 작성해야 할까요? 현실적으로 시간이 많이 걸리고, 어렵습니다.

우선, 변수가 일정한 패턴이 있는 지 확인해야 합니다. 패턴을 보니, 추출이 필요한 칼럼이 문자 ‘c’로 시작한다고 가정해 보겠습니다. 그럼, 약간의 파이썬 코딩을 통해서 문자 ‘c’로 시작하는 변수를 저장하는 리스트를 생성하고, 해당 리스트를 columns 옵션에 반영하면 됩니다.


parquet 파일의 특정 패턴을 보이는 열 추출하기

# 필요 라이브러리 불러오기 
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# D드라이브에 저장되어 있는 fakeData.parquet 파일의 칼럼명을 확인하여 columnList 에 저장
columnList = pq.read_schema('D:/fakeData.parquet').names

# 'c'로 시작하는 컬럼의 컬럼명을 저장하기 위한 리스트 생성
finalColumnList = []

# columnList 에 저장되어 있는 컬럼명 중 'c'로 시작하는 컬럼을 확인하여 finalColumnList 에 저장
for column in columnList :
    if column.startswith('c') :
        finalColumnList.append(column)

# 'c'로 시작하는 컬럼만 추출하여 finalSubBigData 에 저장
finalSubBigData = pd.read_parquet('D:/fakeData.parquet', columns = finalColumnList)

# 데이터프레임 finalSubBigData 확인
finalSubBigData.head()

--------------------------------------------

	cardamt	country
0	79626	Guadeloupe
1	34372	South Africa
2	22185	Syrian Arab Republic
3	31802	Namibia
4	92346	Iceland

이상으로 parquet 파일에서 특정 열을 추출하는 방법에 대해서 알아 보았습니다. parquet 파일의 특정 열(column) 추출은 빅데이터 분석 시 기본으로 반드시 이해하고 있어야 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다