2015-07-15 15 views

Odpowiedz

14

Nie ma żadnej różnicy. Zacytować makeRDD doctring:

Ta metoda jest identyczna parallelize.

i jeśli spojrzeć na realizację to po prostu wywołuje parallelize:

def makeRDD[T: ClassTag](
    seq: Seq[T], 
    numSlices: Int = defaultParallelism): RDD[T] = withScope { 
    parallelize(seq, numSlices) 
} 

Pod koniec dnia jest to kwestia gustu. Należy wziąć pod uwagę, że wydaje się, że makeRDD jest specyficzne dla API Scala. PySpark i wewnętrzny interfejs API SparkR zapewniają tylko parallelize.

Uwaga: Jest to druga realizacja makeRDD który pozwala ustawić preferencje lokalizacji, ale biorąc pod uwagę inny podpis nie jest wymienny z parallelize.

2

Jak zauważył @ zero323, makeRDD ma 2 implementacje. Jedna jest identyczna z równoległością. other to bardzo przydatny sposób wprowadzania lokalizacji danych do aplikacji Spark, nawet jeśli nie korzystasz z HDFS.

Na przykład udostępnia lokalizację danych, gdy dane są już rozprowadzane na dysku w klastrze Spark zgodnie z pewną logiką biznesową. Załóżmy, że Twoim celem jest stworzenie RDD, które będzie ładować dane z dysku i przekształcać je za pomocą funkcji, i chciałbyś to zrobić, uruchamiając lokalnie dane tak bardzo, jak to możliwe.

Aby to zrobić, możesz użyć makeRDD, aby utworzyć puste RDD z różnymi preferencjami lokalizacji przypisanymi do każdej z partycji RDD. Każda partycja może być odpowiedzialna za ładowanie twoich danych. Dopóki wypełniasz partycje ścieżką do lokalnych danych o partycjach, wykonywanie kolejnych transformacji będzie lokalnymi węzłami.

Seq<Tuple2<Integer, Seq<String>>> rddElemSeq = 
         JavaConversions.asScalaBuffer(rddElemList).toSeq(); 
RDD<Integer> rdd = sparkContext.makeRDD(rddElemSeq, ct); 
JavaRDD<Integer> javaRDD = JavaRDD.fromRDD(rdd, ct); 
JavaRDD<List<String>> keyRdd = javaRDD.map(myFunction); 
JavaRDD<myData> myDataRdd = keyRdd.map(loadMyData); 

W tym fragmencie, rddElemSeq zawiera preferencje lokalizacji dla każdej partycji (adres IP). Każda partycja ma także Integer, który działa jak klucz. Moja funkcja myFunction pochłania ten klucz i może zostać wykorzystana do wygenerowania listy ścieżek do moich danych lokalnych do tej partycji. Następnie dane mogą być załadowane w następnej linii.

Powiązane problemy