[013] [Skalowalność]
PYTANIE: Narzędzia do nauki danych za pomocą Scali
Wiem, że Spark jest w pełni zintegrowany ze Scalą. Jest to przypadek użycia specjalnie dla dużych zestawów danych. Jakie inne narzędzia mają dobre wsparcie dla Scali? Czy Scala najlepiej nadaje się do większych zestawów danych? A może nadaje się również do mniejszych zestawów danych?
ODPOWIEDŹ: Krótka odpowiedź. – Scala działa zarówno na małych, jak i dużych danych, ale ich tworzenie i rozwój jest motywowany potrzebą czegoś skalowalnego. Scala to skrót od „Scalable Language”.
Długa odpowiedź – Scala to funkcjonalny język programowania, który działa na JVM. Część „funkcjonalna” to podstawowa różnica w języku, która sprawia, że myślisz inaczej o programowaniu. Jeśli podoba ci się ten sposób myślenia, pozwala on szybko pracować z małymi danymi. Niezależnie od tego, czy ci się to podoba, czy nie, języki funkcjonalne są zasadniczo łatwiejsze do masowego skalowania. Kawałek jvm jest również ważny, ponieważ jvm jest zasadniczo wszędzie, a zatem kod Scala może działać w zasadzie wszędzie. (Zauważ, że jest wiele innych języków napisanych na Jvm i wiele innych funkcjonalnych języków programowania, a języki poza Scalą pojawiają się na obu listach.) Ten wykład daje dobry przegląd motywacji stojących za Scalą.
Re: inne narzędzia, które mają dobre wsparcie Scala:
Jak już wspomniałeś, Spark (dystrybuowalne przetwarzanie wsadowe lepiej w algorytmach iteracyjnych niż jego odpowiednik) jest duży. Wraz z Spark dostarczane są biblioteki Mllib do uczenia maszynowego i GraphX do wykresów.
Zasadniczo nie mogę powiedzieć, czy istnieje konkretny przypadek użycia, dla którego kopiesz (jeśli tak, uczyń go częścią swojego pytania), lub po prostu chcę przeprowadzić ankietę na temat narzędzi do dużych zbiorów danych i zdarzyć się, że znasz trochę Scalę i chcesz zacząć od tego.
ODPOWIEDŹ: ScalaNLP to zestaw bibliotek do uczenia maszynowego i obliczeń numerycznych z obsługą typowych zadań przetwarzania języka naturalnego. http://www.scalanlp.org/
ODPOWIEDŹ: Słuchając prezentacji Martina Oderskiego, twórcy Scali, jest on szczególnie odpowiedni do budowania wysoce skalowalnych systemów poprzez wykorzystanie funkcjonalnych konstrukcji programistycznych w połączeniu z orientacją obiektową i elastyczną składnią. Przydaje się również do opracowywania małych systemów i szybkiego prototypowania, ponieważ zajmuje mniej wierszy kodu niż niektóre inne języki i ma tryb interaktywny do szybkiego przesyłania informacji zwrotnych. Jednym z godnych uwagi frameworków Scala jest Akka, która wykorzystuje model aktora obliczeń współbieżnych. Wiele prezentacji Odersky’ego znajduje się na YouTube, a na wiki.scala-lang.org znajduje się lista narzędzi zaimplementowanych w Scali. Domniemany jest fakt, że narzędzia i frameworki napisane w Scali z natury mają integrację Scali i zwykle Scala API. Następnie można dodawać inne interfejsy API w celu obsługi innych języków zaczynających się na Javie, ponieważ Scala jest już zintegrowana i faktycznie zależy od Javy. Jeśli narzędzie lub środowisko nie jest napisane w Scali, jest mało prawdopodobne, aby oferowało jakiekolwiek wsparcie dla Scali. Dlatego w odpowiedzi na twoje pytanie wskazałem narzędzia i ramy napisane w Scali, a Spark jest jednym z przykładów. Jednak Scala ma obecnie niewielki udział w rynku, ale jego wskaźnik adopcji rośnie, a wysoka stopa wzrostu Spark to zwiększy. Powodem, dla którego używam Scali jest to, że API Spark dla Scali jest bogatsze niż API Java i Python. Głównym powodem, dla którego wolę Scalę, jest to, że jest o wiele bardziej ekspresyjna niż Java, ponieważ umożliwia i ułatwia korzystanie z funkcji jako obiektów i wartości przy jednoczesnym zachowaniu modułowej orientacji obiektowej, co umożliwia tworzenie złożonych i poprawnych programów z dużo mniejszym kodem niż Java, które Wolałem ze względu na szerokie zastosowanie, przejrzystość i doskonałą dokumentację.