Ho un set di dati di grandi dimensioni che devo dividere in gruppi in base a parametri specifici. Voglio che il lavoro venga elaborato nel modo più efficiente possibile. Posso immaginare due modi per farlo
Opzione 1 : creare una mappa dall'RDD originale e filtrare
def customMapper(record):
if passesSomeTest(record):
return (1,record)
else:
return (0,record)
mappedRdd = rddIn.map(lambda x: customMapper(x))
rdd0 = mappedRdd.filter(lambda x: x[0]==0).cache()
rdd1 = mappedRdd.filter(lambda x: x[1]==1).cache()
Opzione 2 : filtrare direttamente RDD originale
def customFilter(record):
return passesSomeTest(record)
rdd0 = rddIn.filter(lambda x: customFilter(x)==False).cache()
rdd1 = rddIn.filter(customFilter).cache()
Il metodo del pugno deve iterare su tutti i record del set di dati originale 3 volte, in cui il secondo deve farlo solo due volte, in circostanze normali, tuttavia, spark fa un po 'dietro la costruzione del grafico delle scene, quindi potrei immaginare che siano fatto efficacemente allo stesso modo. Le mie domande sono: a.) Un metodo è più efficiente dell'altro o la creazione del grafico a scintilla li rende equivalenti b.) È possibile eseguire questa divisione in un unico passaggio