我有大量的csv數據,大約40GB的大小需要處理(讓我們稱之爲'body')。本體中每個文件中的數據由單列CSV文件組成。每行是由單詞和短句組成的關鍵字,例如,使用熊貓或其他方法比較大型文本數據(〜40GB)
Dog
Feeding cat
used cars in Brighton
trips to London
.....
該數據需要與另一組文件(這個7GB的大小,我將稱之爲「減除」),從減除任何關鍵字需要確定並排出體外進行比較。爲清除量數據類似於什麼在身上,即:
Guns
pricless ming vases
trips to London
pasta recipes
........
雖然我有一個方法,將完成這項工作,這是一個非常緩慢的辦法,可能需要一個美好的一週結束。這是一種多線程方法,其中來自7GB主體的每個文件在for循環中與來自主體的文件進行比較。它將Removals文件中的列轉換爲列表,然後過濾主體文件以保留任何不在該列表中的行。過濾後的數據添加到輸出文件:
def thread_worker(file_):
removal_path="removal_files"
allFiles_removals = glob.glob(removal_path + "/*.csv", recursive=True)
print(allFiles_removals)
print(file_)
file_df = pd.read_csv(file_)
file_df.columns = ['Keyword']
for removal_file_ in allFiles_removals:
print(removal_file_)
vertical_df = pd.read_csv(vertical_file_, header=None)
vertical_df.columns = ['Keyword']
vertical_keyword_list = vertical_df['Keyword'].values.tolist()
file_df = file_df[~file_df['Keyword'].isin(vertical_keyword_list)]
file_df.to_csv('output.csv',index=False, header=False, mode='a')
很顯然,我的主要目的是解決如何完成這件事faster.Is熊貓即使是最好做到這一點呢?在處理CSV文件時,我傾向於默認使用它。
你想比較什麼?一個文件中的所有數據都針對另一個文件中的所有數據 – Jimilian
準確地說,我想要拍攝一組文件(總計40GB),並且我想刪除也出現在另一組文件(7GB主體)中的任何關鍵字。 – GreenGodot
我會把身體分成幾塊,比如說每個1GB,也許根據你的RAM大小,在每個塊上並行地完成其餘部分。然後轉換一個塊(使用'awk'),使其每行有一個單詞並引入一個NUL和另一個獨特的字符來標記行的開始和結束。然後針對該塊運行刪除的'grep -vfb'。然後重新組裝。 –