2015-02-08 11 views
15

Czy spowoduje przetasowanie, jeśli rdd1 i rdd2 mają ten sam partycjoner?Czy łączenie współdzielonych RDD powoduje przetasowanie w Apache Spark?

+3

Czy możesz przepisać to pytanie, aby było bardziej zrozumiałe? Tylko dlatego, że RDD mają partycje na tych samych maszynach, nie oznacza to, że wszystkie klucze są zawsze na tej samej partycji na obu. O co więc pytasz? –

+1

Całkowicie przepisałem to pytanie. Myślę, że teraz ma to sens, ale nie jestem pewien, co to znaczy @zwb. Tak naprawdę nie rozumiem oryginału. Jeśli chcesz, możesz cofnąć moją zmianę i zaktualizować pytanie. –

+0

Dzięki, pochodzę z Chin, a mój angielski jest słaby, nie mogę wyrazić się bardzo jasno, a to, co przepisałeś, jest moim zmysłem. – zwb

Odpowiedz

28

Nie. Jeśli dwa urządzenia RDD mają tę samą partycję, join nie spowoduje przetasowania. Można to zobaczyć w CoGroupedRDD.scala:

override def getDependencies: Seq[Dependency[_]] = { 
    rdds.map { rdd: RDD[_ <: Product2[K, _]] => 
    if (rdd.partitioner == Some(part)) { 
     logDebug("Adding one-to-one dependency with " + rdd) 
     new OneToOneDependency(rdd) 
    } else { 
     logDebug("Adding shuffle dependency with " + rdd) 
     new ShuffleDependency[K, Any, CoGroupCombiner](rdd, part, serializer) 
    } 
    } 
} 

Uwaga jednak, że brak shuffle, nie oznacza, że ​​żadne dane nie będą musiały być przenoszone między węzłami. Jest możliwe, że dwa RDD mają ten sam partycjoner (są współdzielone), ale mają odpowiednie partycje zlokalizowane w różnych węzłach (nie mogą być zlokalizowane).

Ta sytuacja jest lepsza niż przetasowanie, ale należy o tym pamiętać. Kolokacja może poprawić wydajność, ale jest trudna do zagwarantowania.

+0

Jeszcze raz dziękuję, w zasadzie to zignoruję i przeczytam kod źródłowy, aby uzyskać więcej. – zwb

+0

Pytanie uzupełniające: czy są jakieś implementacje SQL Sparka (w tym oddzielne projekty spoza głównej dystrybucji), które wykorzystują współdzielenie partycji? – javadba

+0

@javadba: Pewnie warto o to zapytać w osobnym pytaniu. http://spark.apache.org/docs/latest/sql-programming-guide.html mówi o 'spark.sql.shuffle.partitions', że _" konfiguruje liczbę partycji do użycia podczas tasowania danych dla złączeń lub agregacji "_ To dobry znak. –

Powiązane problemy