Ho il seguente problemacome parallelizzare molti confronti di stringa (fuzzy) usando apply in Panda?
Ho un dataframe maestro che contiene frasi, come ad esempio
master
Out[8]:
original
0 this is a nice sentence
1 this is another one
2 stackoverflow is nice
Per ogni riga in Master, io di ricerca in un altro dataframe schiavo per la migliore corrispondenza con fuzzywuzzy
. Io uso fuzzywuzzy perché le frasi corrispondenti tra i due dataframes potrebbero differire un po '(caratteri extra, ecc.).
Per esempio, schiavo potrebbe essere
slave
Out[10]:
my_value name
0 2 hello world
1 1 congratulations
2 2 this is a nice sentence
3 3 this is another one
4 1 stackoverflow is nice
Ecco una completamente funzionale, meraviglioso, compatto esempio di lavoro :)
from fuzzywuzzy import fuzz
import pandas as pd
import numpy as np
import difflib
master= pd.DataFrame({'original':['this is a nice sentence',
'this is another one',
'stackoverflow is nice']})
slave= pd.DataFrame({'name':['hello world',
'congratulations',
'this is a nice sentence ',
'this is another one',
'stackoverflow is nice'],'my_value': [2,1,2,3,1]})
def fuzzy_score(str1, str2):
return fuzz.token_set_ratio(str1, str2)
def helper(orig_string, slave_df):
#use fuzzywuzzy to see how close original and name are
slave_df['score'] = slave_df.name.apply(lambda x: fuzzy_score(x,orig_string))
#return my_value corresponding to the highest score
return slave_df.ix[slave_df.score.idxmax(),'my_value']
master['my_value'] = master.original.apply(lambda x: helper(x,slave))
la questione di 1 milione di dollari è: posso parallelizzare il mio codice di applicazione sopra?
Dopo tutto, ogni riga master
viene confrontata con tutte le righe slave
(slave è un piccolo insieme di dati e può contenere molte copie dei dati nella RAM).
Non vedo perché non è stato possibile eseguire più confronti (ad esempio, elaborare più righe contemporaneamente).
Problema: non so come farlo o se è possibile.
Qualsiasi aiuto molto apprezzato!
Ho notato che hai aggiunto il tag dask qui. Hai già provato a usare dask e hai riscontrato un problema? – MRocklin
grazie per il vostro aiuto! sembra che dask accetti solo le funzioni regolari –
inoltre, ho solo un computer quindi nessun lavoro distribuito tra le macchine –