이번 포스팅에서는 파이썬으로 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) 추출은 빅데이터 분석 시 기본으로 반드시 이해하고 있어야 합니다.