매우 큰 입력 CSV 파일을 사용하여 CSV 파일의 하나의 열 자르기


1

큰 (약 2GB) CSV 파일을 포함하는 300Gb 크기의 폴더가 있습니다. 내 직업은 내가 가지고있는 입력 파일 (또한 2GB 크기)에도 존재하는 특정 열에 값이있는 파일에서 특정 행을 추출하는 것입니다.

현재 Pandas 를 python사용하여 원하는 데이터를 얻기 위해 기반 접근 방식을 사용 하려고하지만이 프로세스는 매우 느리고 한계로 인해 입력 파일과 폴더의 각 파일을 청크로 읽어야합니다. 꽤 오랜 시간 :

all_wow_files = glob.glob('/media/noname365/0205D5FE310DDEEC/bing_verticals_wow_job/US_WOW/*_Keywords.csv')

for file in all_wow_files:

    print(file)

    for chunk in pd.read_csv(file, chunksize=500000):

            for chunk_dupe in pd.read_csv('input_file.csv',chunksize=500000, names=['Keyword']):

                keyword_list = set(chunk_dupe['Keyword'].tolist())

                chunk = chunk[chunk['Keyword'].isin(keyword_list)]

                chunk.to_csv(output_file,index=False, mode='a')

bash작업을 더 빨리 수행하기 위해 사용할 수 있는 특정 명령이 있습니까? 비교를 위해 입력 파일 전체를 메모리로 읽고 싶지 않습니다.

편집하다:

폴더의 파일은 일반적으로 다음과 같이 빌드됩니다. 내 출력에는 포함 된 모든 열이 필요합니다.

Parent ID, ID, Keyword 
1            1  yodel
1            2  keyworks
1            3  puppy dog
2            4  see-saw
...........

내가 사용하는 입력 파일은 문자열의 한 열입니다.

apple
banana
orange
see-saw
moneybags
.....

입력 데이터 샘플과 원하는 출력 예를 제공하십시오.
— agc

답변:


2

이 awk 스크립트는 작업을 수행 할 수 있으며 전체 파일을 메모리에로드하지 않습니다.

awk -F\; '/Keyword/' input.csv >output.csv 

구분 기호가 ;이고 키워드가 Keyword이고 입력 파일이 input.csv있고 출력 파일이output.csv

키워드를 포함 할 특정 열을 검색하려면 다음과 같은 것을 사용해야합니다.

awk -F\; '$5==Keyword' input.csv >output.csv 

또는

awk -F\; '$5==Keyword {print}' input.csv >output.csv

하나 이상의 키워드를 검색하려면 다음과 같은 것을 사용할 수 있습니다.

awk -F\; '$5==Keyword1 || $6==Keyword2 {print}' input.csv >output.csv

나는 이것을 시도 할 것이다! 이것을 루프의 디렉토리에있는 모든 파일에 적용 할 수 있지만 추출 된 키워드가 입력 된 출력 파일 이름이 입력 파일 이름과 유사합니까? 이것은 아마도 그 자체로 별도의 질문 일 것입니다.
— user260504

잠깐만, 대답을 다시 읽으십시오. input.csv 파일에는 실제로 300GB 폴더에서 찾아야하는 모든 키워드가 포함되어 있습니다. 일치하는 항목을 검색 할 수백만 명이 있기 때문에 한 번에 하나의 키워드를 검색 할 수 없습니다.
— user260504

내 편집 된 답변보기
— Romeo Ninov

@ user260504 출력 파일 이름을 반복하고 변경하려면 다음을 수행하십시오 for f in files; do some_command "$f" > "${f%.*}-modified.csv"; done. 자세한 내용은 문자열 조작 을 참조하십시오.
— slhck 2016 년

@ slhck, 감사합니다. 두 개의 키워드만으로도 수백만 개 더 줄었습니다! lol
— user260504
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.