Załóżmy tworzę takie RDD (używam Pyspark):W jaki sposób Spark decyduje, jak podzielić partycję RDD?
list_rdd = sc.parallelize(xrange(0, 20, 2), 6)
następnie wydrukować partycjonowanej elementy z metodą glom()
i uzyskiwania
[[0], [2, 4], [6, 8], [10], [12, 14], [16, 18]]
jaki sposób Spark postanowił jak na partycje moja lista? Skąd się bierze ten konkretny wybór elementów? Mogłoby to połączyć je w inny sposób, pozostawiając kilka innych elementów poza 0 i 10 samodzielnie, aby utworzyć 6 żądanych partycji. Przy drugim uruchomieniu partycje są takie same.
Korzystanie większy zasięg, z 29 elementów, mam partycje w strukturze 2 elementów, a następnie przez trzy elementy:
list_rdd = sc.parallelize(xrange(0, 30, 2), 6)
[[0, 2], [4, 6, 8], [10, 12], [14, 16, 18], [20, 22], [24, 26, 28]]
stosując mniejszy zakres 9 elementów uzyskać
list_rdd = sc.parallelize(xrange(0, 10, 2), 6)
[[], [0], [2], [4], [6], [8]]
Wynika z tego, że Spark generuje partycje, dzieląc listę na konfigurację, w której najmniejsze możliwe są po większych kolekcjach i powtarzane.
Pytanie brzmi, czy istnieje powód takiego wyboru, który jest bardzo elegancki, ale czy zapewnia także korzyści w zakresie wydajności?