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

이번 포스팅에서는 parquet 파일의 열 추출 방법 에 대해서 알아보겠습니다.

데이터 용량이 큰 빅데이터를 분석할 때, 모든 데이터를 메모리에 로드하는 것은 불가능합니다. 따라서, 분석에 필요한 열(column)만 추출하는 것이 필요합니다.

열의 개수가 적은 경우, 열 이름을 모두 코딩하는 것이 가능합니다. 하지만, 추출하고자 하는 열의 개수가 매우 많은 경우, 이를 모두 코딩하는 것은 시간 소요가 너무 큰 비효율적인 작업입니다(어쩌면 아예 불가능할 수도 있습니다).

예제 데이터

사용하고자 하는 예제는 Python Pandas ParserError 해결 방법 에서 생성한 big_data.parquet 파일을 활용하겠습니다.


big_data.pqrquet 파일의 스키마 확인

우선, 어떤 열이 포함되어 있는지 스키마를 통해 확인해 보겠습니다.

# 필수 라이브러리 임포트 
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 'big_data.parquet' 파일의 스키마 확인
schemaConfirm = pq.read_schema("D:/big_data/big_data.parquet").names
schemaConfirm 
------------------------------------------
['var1',
 'var2',
 'var3',
 'var4',
 'var5',
 'var6',
 'var7',
 'var8',
 'var9',
 'var10',
 'var11',
 'var12',
 'var13',
 'var14',
 'var15',
 'var16',
 'var17',
 'var18',
 'var19',
 'var20',
 'var21',
 'var22',
 'var23',
 'var24',
 'var25',
 'var26',
 'var27',
 'var28',
 'var29',
 'var30',
 'var31',
 'var32',
 'var33',
 'var34',
 'var35',
 'var36',
 'var37',
 'var38',
 'var39',
 'var40',
 'var41',
 'var42',
 'var43',
 'var44',
 'var45',
 'var46',
 'var47',
 'var48',
 'var49',
 'var50',
 'var51',
 'var52',
 'var53',
 'var54',
 'var55',
 'var56',
 'var57',
 'var58',
 'var59',
 'var60',
 'var61',
 'var62',
 'var63',
 'var64',
 'var65',
 'var66',
 'var67',
 'var68',
 'var69',
 'var70',
 'var71',
 'var72',
 'var73',
 'var74',
 'var75',
 'var76',
 'var77',
 'var78',
 'var79',
 'var80',
 'var81',
 'var82',
 'var83',
 'var84',
 'var85',
 'var86',
 'var87',
 'var88',
 'var89',
 'var90',
 'var91',
 'var92',
 'var93',
 'var94',
 'var95',
 'var96',
 'var97',
 'var98',
 'var99',
 'var100',
 'var101',
 'var102',
 'var103',
 'var104',
 'var105',
 'var106',
 'var107',
 'var108',
 'var109',
 'var110',
 'var111',
 'var112',
 'var113',
 'var114',
 'var115',
 'var116',
 'var117',
 'var118',
 'var119',
 'var120',
 'var121',
 'var122',
 'var123',
 'var124',
 'var125',
 'var126',
 'var127',
 'var128',
 'var129',
 'var130',
 'var131',
 'var132',
 'var133',
 'var134',
 'var135',
 'var136',
 'var137',
 'var138',
 'var139',
 'var140',
 'var141',
 'var142',
 'var143',
 'var144',
 'var145',
 'var146',
 'var147',
 'var148',
 'var149',
 'var150',
 'var151',
 'var152',
 'var153',
 'var154',
 'var155',
 'var156',
 'var157',
 'var158',
 'var159',
 'var160',
 'var161',
 'var162',
 'var163',
 'var164',
 'var165',
 'var166',
 'var167',
 'var168',
 'var169',
 'var170',
 'var171',
 'var172',
 'var173',
 'var174',
 'var175',
 'var176',
 'var177',
 'var178',
 'var179',
 'var180',
 'var181',
 'var182',
 'var183',
 'var184',
 'var185',
 'var186',
 'var187',
 'var188',
 'var189',
 'var190',
 'var191',
 'var192',
 'var193',
 'var194',
 'var195',
 'var196',
 'var197',
 'var198',
 'var199',
 'var200',
 'var201',
 'var202',
 'var203',
 'var204',
 'var205',
 'var206',
 'var207',
 'var208',
 'var209',
 'var210',
 'var211',
 'var212',
 'var213',
 'var214',
 'var215',
 'var216',
 'var217',
 'var218',
 'var219',
 'var220',
 'var221',
 'var222',
 'var223',
 'var224',
 'var225',
 'var226',
 'var227',
 'var228',
 'var229',
 'var230',
 'var231',
 'var232',
 'var233',
 'var234',
 'var235',
 'var236',
 'var237',
 'var238',
 'var239',
 'var240',
 'var241',
 'var242',
 'var243',
 'var244',
 'var245',
 'var246',
 'var247',
 'var248',
 'var249',
 'var250',
 'var251',
 'var252',
 'var253',
 'var254',
 'var255',
 'var256',
 'var257',
 'var258',
 'var259',
 'var260',
 'var261',
 'var262',
 'var263',
 'var264',
 'var265',
 'var266',
 'var267',
 'var268',
 'var269',
 'var270',
 'var271',
 'var272',
 'var273',
 'var274',
 'var275',
 'var276',
 'var277',
 'var278',
 'var279',
 'var280',
 'var281',
 'var282',
 'var283',
 'var284',
 'var285',
 'var286',
 'var287',
 'var288',
 'var289',
 'var290',
 'var291',
 'var292',
 'var293',
 'var294',
 'var295',
 'var296',
 'var297',
 'var298',
 'var299',
 'var300',
 'var301',
 'var302',
 'var303',
 'var304',
 'var305',
 'var306',
 'var307',
 'var308',
 'var309',
 'var310',
 'var311',
 'var312',
 'var313',
 'var314',
 'var315',
 'var316',
 'var317',
 'var318',
 'var319',
 'var320',
 'var321',
 'var322',
 'var323',
 'var324',
 'var325',
 'var326',
 'var327',
 'var328',
 'var329',
 'var330',
 'var331',
 'var332',
 'var333',
 'var334',
 'var335',
 'var336',
 'var337',
 'var338',
 'var339',
 'var340',
 'var341',
 'var342',
 'var343',
 'var344',
 'var345',
 'var346',
 'var347',
 'var348',
 'var349',
 'var350',
 'var351',
 'var352',
 'var353',
 'var354',
 'var355',
 'var356',
 'var357',
 'var358',
 'var359',
 'var360',
 'var361',
 'var362',
 'var363',
 'var364',
 'var365',
 'var366',
 'var367',
 'var368',
 'var369',
 'var370',
 'var371',
 'var372',
 'var373',
 'var374',
 'var375',
 'var376',
 'var377',
 'var378',
 'var379',
 'var380',
 'var381',
 'var382',
 'var383',
 'var384',
 'var385',
 'var386',
 'var387',
 'var388',
 'var389',
 'var390',
 'var391',
 'var392',
 'var393',
 'var394',
 'var395',
 'var396',
 'var397',
 'var398',
 'var399',
 'var400',
 'var401',
 'var402',
 'var403',
 'var404',
 'var405',
 'var406',
 'var407',
 'var408',
 'var409',
 'var410',
 'var411',
 'var412',
 'var413',
 'var414',
 'var415',
 'var416',
 'var417',
 'var418',
 'var419',
 'var420',
 'var421',
 'var422',
 'var423',
 'var424',
 'var425',
 'var426',
 'var427',
 'var428',
 'var429',
 'var430',
 'var431',
 'var432',
 'var433',
 'var434',
 'var435',
 'var436',
 'var437',
 'var438',
 'var439',
 'var440',
 'var441',
 'var442',
 'var443',
 'var444',
 'var445',
 'var446',
 'var447',
 'var448',
 'var449',
 'var450',
 'var451',
 'var452',
 'var453',
 'var454',
 'var455',
 'var456',
 'var457',
 'var458',
 'var459',
 'var460',
 'var461',
 'var462',
 'var463',
 'var464',
 'var465',
 'var466',
 'var467',
 'var468',
 'var469',
 'var470',
 'var471',
 'var472',
 'var473',
 'var474',
 'var475',
 'var476',
 'var477',
 'var478',
 'var479',
 'var480',
 'var481',
 'var482',
 'var483',
 'var484',
 'var485',
 'var486',
 'var487',
 'var488',
 'var489',
 'var490',
 'var491',
 'var492',
 'var493',
 'var494',
 'var495',
 'var496',
 'var497',
 'var498',
 'var499',
 'var500',
 'var501',
 'var502',
 'var503',
 'var504',
 'var505',
 'var506',
 'var507',
 'var508',
 'var509',
 'var510',
 'var511',
 'var512',
 'var513',
 'var514',
 'var515',
 'var516',
 'var517',
 'var518',
 'var519',
 'var520',
 'var521',
 'var522',
 'var523',
 'var524',
 'var525',
 'var526',
 'var527',
 'var528',
 'var529',
 'var530',
 'var531',
 'var532',
 'var533',
 'var534',
 'var535',
 'var536',
 'var537',
 'var538',
 'var539',
 'var540',
 'var541',
 'var542',
 'var543',
 'var544',
 'var545',
 'var546',
 'var547',
 'var548',
 'var549',
 'var550',
 'var551',
 'var552',
 'var553',
 'var554',
 'var555',
 'var556',
 'var557',
 'var558',
 'var559',
 'var560',
 'var561',
 'var562',
 'var563',
 'var564',
 'var565',
 'var566',
 'var567',
 'var568',
 'var569',
 'var570',
 'var571',
 'var572',
 'var573',
 'var574',
 'var575',
 'var576',
 'var577',
 'var578',
 'var579',
 'var580',
 'var581',
 'var582',
 'var583',
 'var584',
 'var585',
 'var586',
 'var587',
 'var588',
 'var589',
 'var590',
 'var591',
 'var592',
 'var593',
 'var594',
 'var595',
 'var596',
 'var597',
 'var598',
 'var599',
 'var600',
 'var601',
 'var602',
 'var603',
 'var604',
 'var605',
 'var606',
 'var607',
 'var608',
 'var609',
 'var610',
 'var611',
 'var612',
 'var613',
 'var614',
 'var615',
 'var616',
 'var617',
 'var618',
 'var619',
 'var620',
 'var621',
 'var622',
 'var623',
 'var624',
 'var625',
 'var626',
 'var627',
 'var628',
 'var629',
 'var630',
 'var631',
 'var632',
 'var633',
 'var634',
 'var635',
 'var636',
 'var637',
 'var638',
 'var639',
 'var640',
 'var641',
 'var642',
 'var643',
 'var644',
 'var645',
 'var646',
 'var647',
 'var648',
 'var649',
 'var650',
 'var651',
 'var652',
 'var653',
 'var654',
 'var655',
 'var656',
 'var657',
 'var658',
 'var659',
 'var660',
 'var661',
 'var662',
 'var663',
 'var664',
 'var665',
 'var666',
 'var667',
 'var668',
 'var669',
 'var670',
 'var671',
 'var672',
 'var673',
 'var674',
 'var675',
 'var676',
 'var677',
 'var678',
 'var679',
 'var680',
 'var681',
 'var682',
 'var683',
 'var684',
 'var685',
 'var686',
 'var687',
 'var688',
 'var689',
 'var690',
 'var691',
 'var692',
 'var693',
 'var694',
 'var695',
 'var696',
 'var697',
 'var698',
 'var699',
 'var700',
 'var701',
 'var702',
 'var703',
 'var704',
 'var705',
 'var706',
 'var707',
 'var708',
 'var709',
 'var710',
 'var711',
 'var712',
 'var713',
 'var714',
 'var715',
 'var716',
 'var717',
 'var718',
 'var719',
 'var720',
 'var721',
 'var722',
 'var723',
 'var724',
 'var725',
 'var726',
 'var727',
 'var728',
 'var729',
 'var730',
 'var731',
 'var732',
 'var733',
 'var734',
 'var735',
 'var736',
 'var737',
 'var738',
 'var739',
 'var740',
 'var741',
 'var742',
 'var743',
 'var744',
 'var745',
 'var746',
 'var747',
 'var748',
 'var749',
 'var750',
 'var751',
 'var752',
 'var753',
 'var754',
 'var755',
 'var756',
 'var757',
 'var758',
 'var759',
 'var760',
 'var761',
 'var762',
 'var763',
 'var764',
 'var765',
 'var766',
 'var767',
 'var768',
 'var769',
 'var770',
 'var771',
 'var772',
 'var773',
 'var774',
 'var775',
 'var776',
 'var777',
 'var778',
 'var779',
 'var780',
 'var781',
 'var782',
 'var783',
 'var784',
 'var785',
 'var786',
 'var787',
 'var788',
 'var789',
 'var790',
 'var791',
 'var792',
 'var793',
 'var794',
 'var795',
 'var796',
 'var797',
 'var798',
 'var799',
 'var800',
 'var801',
 'var802',
 'var803',
 'var804',
 'var805',
 'var806',
 'var807',
 'var808',
 'var809',
 'var810',
 'var811',
 'var812',
 'var813',
 'var814',
 'var815',
 'var816',
 'var817',
 'var818',
 'var819',
 'var820',
 'var821',
 'var822',
 'var823',
 'var824',
 'var825',
 'var826',
 'var827',
 'var828',
 'var829',
 'var830',
 'var831',
 'var832',
 'var833',
 'var834',
 'var835',
 'var836',
 'var837',
 'var838',
 'var839',
 'var840',
 'var841',
 'var842',
 'var843',
 'var844',
 'var845',
 'var846',
 'var847',
 'var848',
 'var849',
 'var850',
 'var851',
 'var852',
 'var853',
 'var854',
 'var855',
 'var856',
 'var857',
 'var858',
 'var859',
 'var860',
 'var861',
 'var862',
 'var863',
 'var864',
 'var865',
 'var866',
 'var867',
 'var868',
 'var869',
 'var870',
 'var871',
 'var872',
 'var873',
 'var874',
 'var875',
 'var876',
 'var877',
 'var878',
 'var879',
 'var880',
 'var881',
 'var882',
 'var883',
 'var884',
 'var885',
 'var886',
 'var887',
 'var888',
 'var889',
 'var890',
 'var891',
 'var892',
 'var893',
 'var894',
 'var895',
 'var896',
 'var897',
 'var898',
 'var899',
 'var900',
 'var901',
 'var902',
 'var903',
 'var904',
 'var905',
 'var906',
 'var907',
 'var908',
 'var909',
 'var910',
 'var911',
 'var912',
 'var913',
 'var914',
 'var915',
 'var916',
 'var917',
 'var918',
 'var919',
 'var920',
 'var921',
 'var922',
 'var923',
 'var924',
 'var925',
 'var926',
 'var927',
 'var928',
 'var929',
 'var930',
 'var931',
 'var932',
 'var933',
 'var934',
 'var935',
 'var936',
 'var937',
 'var938',
 'var939',
 'var940',
 'var941',
 'var942',
 'var943',
 'var944',
 'var945',
 'var946',
 'var947',
 'var948',
 'var949',
 'var950',
 'var951',
 'var952',
 'var953',
 'var954',
 'var955',
 'var956',
 'var957',
 'var958',
 'var959',
 'var960',
 'var961',
 'var962',
 'var963',
 'var964',
 'var965',
 'var966',
 'var967',
 'var968',
 'var969',
 'var970',
 'Unnamed: 970']



일련의 패턴을 가지는 열 추출하기

스키마를 통해 확인한 열(column) 중에서 ‘var840′,’var841′,…,’var969′,’var970’ 을 추출하는 방법에 대해서 알아보겠습니다.

# 필수 라이브러리 임포트 
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 빈 리스트 정의
keepColumns = []

for i in range(840, 970 + 1):
    keepColumns.append('var'+str(i))

# 선택된 열 이름 확인하기
keepColumns
------------------------------------------
['var840',
 'var841',
 'var842',
 'var843',
 'var844',
 'var845',
 'var846',
 'var847',
 'var848',
 'var849',
 'var850',
 'var851',
 'var852',
 'var853',
 'var854',
 'var855',
 'var856',
 'var857',
 'var858',
 'var859',
 'var860',
 'var861',
 'var862',
 'var863',
 'var864',
 'var865',
 'var866',
 'var867',
 'var868',
 'var869',
 'var870',
 'var871',
 'var872',
 'var873',
 'var874',
 'var875',
 'var876',
 'var877',
 'var878',
 'var879',
 'var880',
 'var881',
 'var882',
 'var883',
 'var884',
 'var885',
 'var886',
 'var887',
 'var888',
 'var889',
 'var890',
 'var891',
 'var892',
 'var893',
 'var894',
 'var895',
 'var896',
 'var897',
 'var898',
 'var899',
 'var900',
 'var901',
 'var902',
 'var903',
 'var904',
 'var905',
 'var906',
 'var907',
 'var908',
 'var909',
 'var910',
 'var911',
 'var912',
 'var913',
 'var914',
 'var915',
 'var916',
 'var917',
 'var918',
 'var919',
 'var920',
 'var921',
 'var922',
 'var923',
 'var924',
 'var925',
 'var926',
 'var927',
 'var928',
 'var929',
 'var930',
 'var931',
 'var932',
 'var933',
 'var934',
 'var935',
 'var936',
 'var937',
 'var938',
 'var939',
 'var940',
 'var941',
 'var942',
 'var943',
 'var944',
 'var945',
 'var946',
 'var947',
 'var948',
 'var949',
 'var950',
 'var951',
 'var952',
 'var953',
 'var954',
 'var955',
 'var956',
 'var957',
 'var958',
 'var959',
 'var960',
 'var961',
 'var962',
 'var963',
 'var964',
 'var965',
 'var966',
 'var967',
 'var968',
 'var969',
 'var970']

# "big_data.parquet" 파일에서 'var840','var841',...,'var969','var970' 열 추출하기
tempData1 = pd.read_parquet("D:/big_data/big_data.parquet", columns = keepColumns)
tempData1.head()


특정 문자열로 시작하는 열 추출하기

스키마를 통해 확인한 열 이름에서 ‘var96’ 으로 시작하는 열을 추출해 보겠습니다.

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 빈 리스트 정의
keepColumns = []

# 'var96'으로 시작하는 열 이름 추출하기 
for i in pq.read_schema("D:/big_data/big_data.parquet").names:
    if i.startswith('var96'): 
        keepColumns.append(i)

# 추출된 열 이름 확인하기 
keepColumns
------------------------
['var96',
 'var960',
 'var961',
 'var962',
 'var963',
 'var964',
 'var965',
 'var966',
 'var967',
 'var968',
 'var969']

# "big_data.parquet" 파일에서 최종 열 추출하기 
tempData2 = pd.read_parquet("D:/big_data/big_data.parquet", columns = keepColumns)
tempData2.head()


결론

이상으로 parquet 파일에서 특정 패턴을 보이는 열을 추출하는 방법에 대해서 알아보았습니다. 빅데이터에서 분석에 필요한 열만 추출하는 과정은 매우 중요합니다. 메모리 오류없이 분석하기 위해서는 매우 필수적인 과정이라 할 수 있습니다.

감사합니다.

답글 남기기

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