Quando si riduce il numero di partizioni si può usare coalesce
, che è ottimo perché non causa uno shuffle e sembra funzionare immediatamente (non richiede una fase di lavoro aggiuntiva).Spark: aumentare il numero di partizioni senza causare un shuffle?
Mi piacerebbe fare l'opposto a volte, ma repartition
induce un shuffle. Penso che alcuni mesi fa ho effettivamente funzionato usando CoalescedRDD
con balanceSlack = 1.0
- quindi cosa succederebbe sarebbe dividere una partizione in modo che la partizione risultante posizione in cui tutti sullo stesso nodo (così piccolo IO rete).
Questo tipo di funzionalità è automatico in Hadoop, basta modificare le dimensioni divise. Non sembra funzionare in questo modo in Spark a meno che non si stia riducendo il numero di partizioni. Penso che la soluzione potrebbe essere quella di scrivere un partizionatore personalizzato insieme a un RDD personalizzato in cui definiamo getPreferredLocations
... ma ho pensato che è una cosa così semplice e comune da fare sicuramente ci deve essere un modo semplice per farlo?
Cose cercato:
.set("spark.default.parallelism", partitions)
sul mio SparkConf
, e quando nel contesto della lettura parquet ho provato sqlContext.sql("set spark.sql.shuffle.partitions= ...
, che sulla 1.0.0 provoca un errore e non vuole veramente che voglio, voglio partizione numero da cambiare tra tutti i tipi di lavoro, non solo shuffle.
Qualche fortuna di trovare una soluzione per questo? – nbubis