DataSet a RDD w Spark

0

Tak sobie patrze na DataSet w Sparku i denerwuje mnie że to wszystko opiera się na stringach w nazwach kolumn i dziwnych funkcjach rodem z SQL.
Najpierw sobie zrobiłem klasę do której zmapowałem dane, więc chciałbym sobie wygodnie to posortować na przykład, a tu żądane jest podanie nazwy kolumny w Stringu.
W RDD:

.sortBy(_.field, ascending = false)

W DataSet:

.sort($"field".desc)

Co sądzicie o DataSetach? Czy w kolejnych wersjach to jakoś poprawią? Czego się używa komercyjnie?
Jakoś mam awersję do całego Spark SQL i pisania w Stringach, czy to komend, czy nazw kolumn. Czemu miało by się tego używać gdy można coś robić w sposób typowany?

0

Spark SQL ma optymalizatora zapytań takie jakie są w normalnych bazkach. Jeśli robisz więc iloczyn kartezjański na dwóch kolekcjach, a potem wybierasz np tylko pary w których konkretne IDki się zgadzają to Spark to tak zoptymalizuje, by w rzeczywistości odfiltrować dane jak najszybciej zamiast pracowicie tworzyć mnóstwo par, które i tak zostałyby odfiltrowane. To oczywiście tylko jeden przykład i to dość prosty. Jak chcesz bardziej skomplikowane to weź dowolną bazę danych, wklep nietrywialne zapytanie SQL, popatrz na plan wykonania i porównaj z oryginalnym zapytaniem.

Używając RDD pozbawiasz Sparka możliwości optymalizacji rodem z baz SQL dlatego, że Spark nie jest w stanie przeanalizować ani funkcji, ani typów danych, nie mówiąc już o tym, iż taki SQL ma bardzo ograniczoną ilość operatorów (słów kluczowych) i tego powodu łatwiej go optymalizować niż język dający pełną swobodę. Skoro w RDD nie dostajesz optymalizacji z automatu to musisz je sam implementować - np musisz unikać niepotrzebnych iloczynów kartezjańskich, partycjonować rozsądnie zbiory danych, odfiltrowywać dane najwcześniej jak się da, ograniczać przepływ danych między workerami, itp itd

1 użytkowników online, w tym zalogowanych: 0, gości: 1