ฉันมีโฟลเดอร์ 300GB ในขนาดที่มีขนาดใหญ่ (ประมาณ 2GB) CSVไฟล์ งานของฉันคือแยกแถวจากแฟ้มที่มีค่าในคอลัมน์เฉพาะที่มีอยู่ในไฟล์อินพุตที่ฉันมี (ขนาด 2GB เช่นกัน)
ขณะนี้ฉันกำลังพยายามใช้python
วิธีการแบบพื้นฐานโดยใช้Pandasเพื่อรับข้อมูลที่ฉันต้องการ แต่กระบวนการนี้ช้ามากและเนื่องจากข้อ จำกัด ฉันต้องอ่านทั้งไฟล์อินพุตและไฟล์แต่ละไฟล์ในโฟลเดอร์เป็น chunks ซึ่งกำลังดำเนินการอยู่ ซักพักนึง:
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
.....