J'ai un grand ensemble de données que je dois diviser en groupes selon des paramètres spécifiques. Je veux que le travail soit traité aussi efficacement que possible. Je peux imaginer deux façons de le faire
Option 1 - Créer une carte à partir du RDD et du filtre d'origine
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()
Option 2 - Filtrez directement le RDD d'origine
def customFilter(record):
return passesSomeTest(record)
rdd0 = rddIn.filter(lambda x: customFilter(x)==False).cache()
rdd1 = rddIn.filter(customFilter).cache()
La première méthode doit répéter 3 fois tous les enregistrements de l'ensemble de données d'origine, alors que la seconde ne doit le faire que deux fois, dans des circonstances normales, cependant, spark fait un peu de construction de graphique en arrière-plan, donc je peux imaginer qu'ils sont efficacement de la même manière. Mes questions sont: a.) Est-ce qu'une méthode est plus efficace que l'autre, ou est-ce que la construction du graphique à étincelles les rend équivalentes b.) Est-il possible de faire cette division en une seule passe