Mam mały program Scala, który działa dobrze na pojedynczym węźle. Jednak skaluję go, aby działał na wielu węzłach. To moja pierwsza taka próba. Próbuję tylko zrozumieć, jak RDD działają w Spark, więc to pytanie jest oparte na teorii i może nie być w 100% poprawne.Spark RDD's - jak działają
Powiedzmy utworzyć RDD: val rdd = sc.textFile(file)
Teraz kiedy już to zrobisz, to znaczy, że plik w file
jest teraz podzielona w poprzek węzłów (zakładając, że wszystkie węzły mają dostęp do ścieżki pliku) ?
Po drugie, chcę policzyć liczbę obiektów w RDD (dość proste), ale muszę użyć tego numeru w obliczeniach, które muszą być stosowane do obiektów w RDD - a pseudokod przykład:
rdd.map(x => x/rdd.size)
Można powiedzieć, że są 100 obiekty w rdd
, i powiedzieć, że są 10 węzłów, więc liczyć się z 10 obiektów na węźle (zakładając ten sposób prace pojęcie RDD), teraz gdy zgłoszę metoda jest każdy węzeł będzie wykonać obliczenia z rdd.size
jako 10
lub 100
? Ponieważ ogólnie RDD ma rozmiar 100
, ale lokalnie w każdym węźle jest tylko 10
. Czy przed wykonaniem obliczeń muszę wprowadzić zmienną emisji? To pytanie jest powiązane z poniższym pytaniem.
Wreszcie, jeśli dokonam transformacji do RDD, np. rdd.map(_.split("-"))
, a następnie chciałem nowego size
z RDD, czy muszę wykonać działanie na RDD, takie jak count()
, więc wszystkie informacje są wysyłane z powrotem do węzła sterownika?
"To pytanie jest powiązane z poniższym pytaniem." ->? – gsamaras
Myślę, że chodziło o 'rdd.flatMap (_. Split (" - "))' – lovasoa