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


1

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

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

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.