2017-01-23 76 views
4

我有大量的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文件時,我傾向於默認使用它。

+0

你想比較什麼?一個文件中的所有數據都針對另一個文件中的所有數據 – Jimilian

+0

準確地說,我想要拍攝一組文件(總計40GB),並且我想刪除也出現在另一組文件(7GB主體)中的任何關鍵字。 – GreenGodot

+1

我會把身體分成幾塊,比如說每個1GB,也許根據你的RAM大小,在每個塊上並行地完成其餘部分。然後轉換一個塊(使用'awk'),使其每行有一個單詞並引入一個NUL和另一個獨特的字符來標記行的開始和結束。然後針對該塊運行刪除的'grep -vfb'。然後重新組裝。 –

回答

0

IIUC你能做到這樣:

# read up "removal" keywords from all CSV files, get rid of duplicates 
removals = pd.concat([pd.read_csv(f, sep='~', header=None, names=['Keyword']) for f in removal_files] 
        ignore_index=True).drop_duplicates() 


df = pd.DataFrame() 
for f in body_files: 
    # collect all filtered "body" data (file-by-file) 
    df = pd.concat([df, 
        pd.read_csv(f, sep='~', header=None, names=['Keyword']) \ 
         .query('Keyword not in @removals.Keyword')], 
        ignore_index=True) 
+0

它是一個很好的方法,但是當將所有文件加載到內存中時,缺點是內存不足...... – GreenGodot

+0

@GreenGodot,你有什麼限制?你有多少內存? – MaxU