2017-01-23 48 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