У меня есть папка размером 300 ГБ, содержащая большие (около 2 ГБ) файлы CSV . Моя работа состоит в том, чтобы извлечь определенные строки из тех файлов, которые имеют значение в определенном столбце, который также существует во входном файле, который у меня есть (также размером 2 ГБ).
В настоящее время я пытаюсь использовать подход на основе python
с использованием Pandas для получения нужных мне данных, но этот процесс очень медленный и из-за ограничений мне приходится читать как входной файл, так и каждый файл в папке как чанки, что занять некоторое время, чтобы сделать:
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
.....