이번 포스팅에서는 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 파일에서 특정 패턴을 보이는 열을 추출하는 방법에 대해서 알아보았습니다. 빅데이터에서 분석에 필요한 열만 추출하는 과정은 매우 중요합니다. 메모리 오류없이 분석하기 위해서는 매우 필수적인 과정이라 할 수 있습니다.
감사합니다.