5 книг, с которыми анализ данных и Scala до безобразия просты


Оглавление (нажмите, чтобы открыть):

9 языков для Big Data

Если достаточно образованного программиста спросить о современных языках обработки данных, то в первой тройке неизменно окажется R, даже несмотря на то, что многие его и языком не считают. Придуманный в 1997 году, как альтернатива платным продуктам MATLAB и SAS, он медленно, но верно набирал популярность. Сегодня такие компании, как Google и Facebook используют R, чтобы справляться с такими потоками информации, которые и вообразить сложно. Фильтруйте, моделируйте, представляйте данные при помощи всего нескольких строк кода — всё это про R.

В 2013 году проводился опрос в США среди специалистов в области Big Data на предмет выявления наиболее популярного используемого языка. Победил с 61% именно R. Угадайте, кто занял второе место?

Python

Да, 39% набрал один из самых крутых языков программирования, который совсем не случайно оказался популярен и среди людей, работающих с обработкой больших потоков данных. В некотором роде это компромисс между изощренностью R и лёгкостью, которую дарит язык Python. Его популярность обосновывается как раз отсутствием необходимости применения идеальных алгоритмов в угоду возможности включать в работу группу программистов, не имеющих специальных навыков. Если вы хотите начать изучать этот язык, рекомендуем пройти наш онлайн-интесив по питону.

Julia

Язык, который возник совсем недавно, но уже попал на радары всех специалистов Big Data. Он прост и масштабируем, как Python, при этом эффективен, как R. Пока язык Julia молод, ему не хватает мелких доработок, библиотек и элементарной человеческой поддержки, но сомнений в его безоблачном будущем практически нет.

Ну да, какой рейтинг самых популярных языков программирования без участия Java. Пусть это даже не профильная область применения, Java имеет такую армию поклонников-энтузиастов, что создание специальных надстроек и библиотек — дело времени. Загляните внутрь LinkedIn, Facebook, Twitter — и в обработке данных вы найдёте следы Java. Да, у этого языка нет таких возможностей статистического моделирования, какие естьу Python и R, но если прототипирование не является важной задачей — Java может стать отличным решением.

Scala

Если вы никогда ранее не слышали об этом языке, то можете просто ознакомиться со статистическими данными ,чтобы понять насколько успешен сегодня и насколько перспективен завтра будет Scala. Java-подобный язык может быть развёрнут под веб и платформу Android. Но главное его преимущество заключается в удобстве и гибкости, которые не дадут вам многие другие языки из Big Data. Twitter, Siemens и LinkedIn подтверждают.

MATLAB

Если не говорить о MATLAB в контексте обработки и моделирования данных, то о чём вообще тогда стоит говорить? Да, возможно это не лучший язык, не самая доступная среда, но возможности, которые вы получаете, согласившись на оба этих компромисса — практически безграничны. Наука, обработка потоковой информации, анализ полученных и прогнозируемых данных — всё это идеальная область для развёртывания MATLAB.

В этом рейтинге мы просто физически не могли обойти и невероятно популярное детище Google. Go активно разрабатывается, внедряется, постепенно завоевывает позиции в рейтинге популярности, и уж абсолютно точно он не хуже подавляющего большинства своих конкурентов. Он прост, он удобен, он бесконечно перспективен, в конце концов он специально создан для Big Data. А что ещё нужно, чтобы получить хорошую рекомендацию?

Kafka

Kafka — это не совсем язык, а скорее платформа, написанная на Java и Scala, для обработки потоковых запросов. Был разработан компанией LinkedIn для внутренних потребностей в 2011 году, но сегодня используемые алгоритмы не без успеха внедрены в такие гиганты, как Uber, Netflix, PayPal, eBay и многие другие.

Hadoop

Это ещё один набор утилит, библиотек и надстроек, которые вполне можно принять за отдельный язык, адаптирующих широко распространённый Java к обработке Big Data. Его активно используют такие гиганты, как Facebook и Yahoo!, а разработан он небезызвестной Apache Software Foundation, что автоматически заставляет поставить на Hadoop клеймо качества.

Мир IT и не только поглощен обработкой беспредельного количества данных. Будь то социальные сети или научная информация — везде требуются инструменты, значительно превышающие по возможностям устаревшие программы, вроде Excel. Требуются принципиально иные подходы и совершенные алгоритмы для их реализации. Вот 9 языков, с помощью которых работа с Big Data доставит вам чуть меньше головной боли.

Если достаточно образованного программиста спросить о современных языках обработки данных, то в первой тройке неизменно окажется R, даже несмотря на то, что многие его и языком не считают. Придуманный в 1997 году, как альтернатива платным продуктам MATLAB и SAS, он медленно, но верно набирал популярность. Сегодня такие компании, как Google и Facebook используют R, чтобы справляться с такими потоками информации, которые и вообразить сложно. Фильтруйте, моделируйте, представляйте данные при помощи всего нескольких строк кода — всё это про R.

В 2013 году проводился опрос в США среди специалистов в области Big Data на предмет выявления наиболее популярного используемого языка. Победил с 61% именно R. Угадайте, кто занял второе место?

Python

Да, 39% набрал один из самых крутых языков программирования, который совсем не случайно оказался популярен и среди людей, работающих с обработкой больших потоков данных. В некотором роде это компромисс между изощренностью R и лёгкостью, которую дарит язык Python. Его популярность обосновывается как раз отсутствием необходимости применения идеальных алгоритмов в угоду возможности включать в работу группу программистов, не имеющих специальных навыков. Если вы хотите начать изучать этот язык, рекомендуем пройти наш онлайн-интесив по питону.

Julia

Язык, который возник совсем недавно, но уже попал на радары всех специалистов Big Data. Он прост и масштабируем, как Python, при этом эффективен, как R. Пока язык Julia молод, ему не хватает мелких доработок, библиотек и элементарной человеческой поддержки, но сомнений в его безоблачном будущем практически нет.

Ну да, какой рейтинг самых популярных языков программирования без участия Java. Пусть это даже не профильная область применения, Java имеет такую армию поклонников-энтузиастов, что создание специальных надстроек и библиотек — дело времени. Загляните внутрь LinkedIn, Facebook, Twitter — и в обработке данных вы найдёте следы Java. Да, у этого языка нет таких возможностей статистического моделирования, какие естьу Python и R, но если прототипирование не является важной задачей — Java может стать отличным решением.

Scala

Если вы никогда ранее не слышали об этом языке, то можете просто ознакомиться со статистическими данными ,чтобы понять насколько успешен сегодня и насколько перспективен завтра будет Scala. Java-подобный язык может быть развёрнут под веб и платформу Android. Но главное его преимущество заключается в удобстве и гибкости, которые не дадут вам многие другие языки из Big Data. Twitter, Siemens и LinkedIn подтверждают.

MATLAB

Если не говорить о MATLAB в контексте обработки и моделирования данных, то о чём вообще тогда стоит говорить? Да, возможно это не лучший язык, не самая доступная среда, но возможности, которые вы получаете, согласившись на оба этих компромисса — практически безграничны. Наука, обработка потоковой информации, анализ полученных и прогнозируемых данных — всё это идеальная область для развёртывания MATLAB.

В этом рейтинге мы просто физически не могли обойти и невероятно популярное детище Google. Go активно разрабатывается, внедряется, постепенно завоевывает позиции в рейтинге популярности, и уж абсолютно точно он не хуже подавляющего большинства своих конкурентов. Он прост, он удобен, он бесконечно перспективен, в конце концов он специально создан для Big Data. А что ещё нужно, чтобы получить хорошую рекомендацию?

Kafka

Kafka — это не совсем язык, а скорее платформа, написанная на Java и Scala, для обработки потоковых запросов. Был разработан компанией LinkedIn для внутренних потребностей в 2011 году, но сегодня используемые алгоритмы не без успеха внедрены в такие гиганты, как Uber, Netflix, PayPal, eBay и многие другие.

Hadoop

Это ещё один набор утилит, библиотек и надстроек, которые вполне можно принять за отдельный язык, адаптирующих широко распространённый Java к обработке Big Data. Его активно используют такие гиганты, как Facebook и Yahoo!, а разработан он небезызвестной Apache Software Foundation, что автоматически заставляет поставить на Hadoop клеймо качества.

Онлайн-учебники по Scala на русском языке

Оставляю здесь ссылки на них, может кому пригодится. Доступ свободный, материал подается вполне доступно.

Может быть, для кого-то — это баян, а кому-то и понадобится.

Upd: русскоязычная конференция по Scala — scala@conference.jabber.ru. Достаточно людное место, общаются с новичками дружелюбно.

Я, пожалуй, прикреплю, если никто не против.

Если найду еще что хорошего, добавлю. Ну и статью в Wiki неплохо бы создать (если руки дойдут).

Молодец. Продолжай в том же духе.

Какая ide для скалки наиболее удобна в linux?

перевод все такой-же кривой?(я где-то месяц назад ими уже делился, тогда жаловались на перевод)

Я читал без особых проблем. Единственно кое-где неверно отображаются русские символы (баг с кодировкой?).

IDEA (+ они поддержку play2 анонсировали, но только в коммерческой версии, вроде). Да и вообще IDEA, наверное, лучшая IDE. Eclipse с плагинами падуч, NB не смотрел.

Как раз вчера искал. Спасибо.

IntelliJ Idea (в бесплатной версии есть поддержка скалы).

Спасибо. Шикарно. Продолжай в том же духе! (пошел качать скалу)

На озоне в продаже книга Scala для нетерпеливых.

Я посчитал, что это тред, где коллекционируются ссылки на руководства по Scala на русском языке, или я что-то не так понял?

Извиняюсь, что не так выразился: не «уже», а «тоже».

Спасибо, что добавил ссылку.

Случайно наткнулся на ваши ссылки — большое спасибо!

Не за что. Отыщешь что, кидай сюда.

К сожалению, слишком сложный язык.

А зачем? Разве английский язык не является обязательным для изучения для любого программиста?

На озоне в продаже книга Scala для нетерпеливых.

Варез зачем сюда тащить?

Экий ты щепетильный! Если полтора линуксоида скачают эту книжку, то издательство не обеднеет.

А какой под нее эталонный цмэс и/или умеет ли она генрить бд из кода как граилз?

Бери любой джавовский. Можно как вариант взять еще SORM.


А с какой книги лучше всего начать обучение? Перевод не особо волнует, так что если его нет, то пофиг. Пока как раз к «SCALA для нетерпеливых» присматриваюсь.

Спасибо. А можно ещё пару слов почему эта книга лучше? Смущает название — всё-таки язык мультипарадигменный.

Лично мое мнение:

  • Имхо язык программирования учить смысла нет: языки и технологии очень быстро меняются, однако принципы как правило остаются. В этой книге скала используется в качестве иллюстративного языка. SICP — это же книга не про схему)
  • Правильный порядок изложения основ функционального подхода, а-ля функтор -> аппликативный функтор -> моноид -> монада.
  • Сильные авторы (привет, scalaz!) и как следствие очень качественный материал.

Это имеет смысл, но (пусть и не слишком глубоко) с некоторыми функциональными языками знаком. Интересен, в первую очередь, именно язык — в смысле его сильные стороны.

Впрочем, об «scala for impatient» отзывы тоже не очень хорошие попадаются.

Информационный портал по безопасности

Анализ данных на Scala. Считаем корреляцию 21-го века

Очень важно выбрать правильный инструмент для анализа данных. На форумах Kaggle.com , где проводятся международные соревнования по Data Science, часто спрашивают, какой инструмент лучше. Первые строчки популярноcти занимают R и Python. В статье мы расскажем про альтернативный стек технологий анализа данных, сделанный на основе языка программирования Scala и платформы распределенных вычислений Spark .

Как мы пришли к этому? В Retail Rocket мы много занимаемся машинным обучением на очень больших массивах данных. Раньше для разработки прототипов мы использовали связку IPython + Pyhs2 (hive драйвер для Python) + Pandas + Sklearn. В конце лета 2014 года приняли принципиальное решение перейти на Spark , так как эксперименты показали, что мы получим 3-4 кратное повышение производительности на том же парке серверов.

Еще один плюс — мы можем использовать один язык программирования для моделирования и кода, который будет работать на боевых серверах. Для нас это было большим преимуществом, так как до этого мы использовали 4 языка одновременно: Hive, Pig, Java, Python, для небольшой команды это серьезная проблема.

Spark хорошо поддерживает работу с Python/Scala/Java через API. Мы решили выбрать Scala, так как именно на нем написан Spark, то есть можно анализировать его исходный код и при необходимости исправлять ошибки, плюс — это JVM, на котором крутится весь Hadoop. Анализ форумов по языкам программирования под Spark свел к следующему:

Scala:
+ функциональный;
+ родной для Spark;
+ работает на JVM, а значит родной для Hadoop;
+ строгая статическая типизация;
— довольно сложный вход, но код читабельный.

Python:
+ популярный;
+ простой;
— динамическая типизация;
— производительность хуже, чем у Scala.

Java:
+ популярность;
+ родной для Hadoop;
— слишком много кода.

Более подробно по выбору языка программирования для Spark можно прочитать здесь .

Должен сказать, что выбор дался не просто, так как Scala никто в команде на тот момент не знал.
Известный факт: чтобы научиться хорошо общаться на языке, нужно погрузиться в языковую среду и использовать его как можно чаще. Поэтому для моделирования и быстрого анализа данных мы отказались от питоновского стека в пользу Scala.

В первую очередь нужно было найти замену IPython, варианты были следующие:
1) Zeppelin — an IPython-like notebook for Spark;
2) ISpark;
3) Spark Notebook;
4) Spark IPython Notebook от IBM .

Пока выбор пал на ISpark, так как он простой, — это IPython для Scala/Spark, к нему относительно легко удалось прикрутить графики HighCharts и R. И у нас не возникло проблем с подключением его к Yarn-кластеру.

Наш рассказ о среде анализа данных на Scala состоит из трех частей:
1) Несложная задача на Scala в ISpark, которая будет выполняться локально на Spark.
2) Настройка и установка компонент для работы в ISpark.
3) Пишем Machine Learning задачу на Scala, используя библиотеки R.
И если эта статья будет популярной, я напишу две другие. 😉

Задача

Давайте попробуем ответить на вопрос: зависит ли средний чек покупки в интернет-магазине от статичных параметров клиента, которые включают в себя населенный пункт, тип браузера (мобильный/Desktop), операционную систему и версию браузера? Сделать это можно с помощью «Взаимной информации» (Mutual Information).

Проведем анализ на реальных данных Retail Rocket . Предварительно я скопировал выборку из нашего кластера к себе на компьютер в виде csv-файла.

Загрузка данных

Здесь мы используем ISpark и Spark, запущенный в локальном режиме, то есть все вычисления происходят локально, распределение идет по ядрам. Собственно в комментариях все написано. Самое главное, что на выходе мы получаем RDD (структура данных Spark), которая представляет собой коллекцию кейс-классов типа Row, который определен в коде. Это позволит обращаться к полям через «.», например _.categoryId.

На входе:
На выходе:

Теперь посмотрим на сами данные:

В данной строке используется новый тип данных DataFrame, добавленный в Spark в версии 1.3.0, он очень похож на аналогичную структуру в библиотеке pandas в Python. toDf подхватывает наш кейс-класс Row, благодаря чему получает названия полей и их типы.

Для дальнейшего анализа нужно выбрать какую-нибудь одну категорию желательно с большим количеством данных. Для этого нужно получить список наиболее популярных категорий.

На входе:
На выходе мы получили массив кортежей (tuple) в формате (categoryId, частота):

Для дальнейшей работы я решил выбрать 128-ю категорию.

Подготовим данные: отфильтруем нужные типы операционных систем, чтобы не засорять графики мусором.

На входе:
На выходе массив кортежей (tuple) в формате OS, средний чек:
Хочется визуализации, давайте сделаем это в HighCharts:

Теоретически можно использовать любые графики HighCharts, если они поддерживаются в Wisp . Все графики интерактивны.

Попробуем сделать то же самое, но через R.
Запускаем R клиент:
Строим сам график:

Так можно строить любые графики R прямо в блокноте IPython.

Взаимная информация

На графиках видно, что зависимость есть, но подтвердят ли нам этот вывод метрики? Существует множество способов это сделать. В нашем случае мы используем взаимную информацию ( Mutual Information ) между величинами в таблице. Она измеряет взаимную зависимость между распределениями двух случайных (дискретных) величин.

Для дискретных распределений она рассчитывается по формуле:

Но нас интересует более практичная метрика: Maximal Information Coefficient (MIC), для расчета которой для непрерывных переменных приходится идти на хитрости. Вот как звучит определение этого параметра.

Пусть D = (x, y) — это набор из n упорядоченных пар элементов случайных величин X и Y. Это двумерное пространство разбивается X и Y сетками, группируя значения x и y в X и Y разбиения соответственно (вспомните гистограммы!).

где B(n) — это размер сетки, I*(D, X, Y ) — это взаимная информация по разбиению X и Y. В знаменателе указан логарифм, который служит для нормализации MIC в значения отрезка [0, 1]. MIC принимает непрерывные значения в отрезке [0,1]: для крайних значений равен 1, если зависимость есть, 0 — если ее нет. Что можно еще почитать по этой теме перечислено в конце статьи, в списке литературы.

В книге MIC (взаимная информация) названа корреляцией 21-го века. И вот почему! На графике ниже приведены 6 зависимостей (графики С — H). Для них были вычислены корреляция Пирсона и MIC, они отмечены соответствующими буквами на графике слева. Как мы видим, корреляция Пирсона практически равна нулю, в то время как MIC показывает зависимость (графики F, G, E).

Первоисточник: people.cs.ubc.ca

В таблице ниже приведен ряд метрик, которые были вычислены на разных зависимостях: случайной, линейной, кубической и т.д. Из таблицы видно, что MIC ведет себя очень хорошо, обнаруживая нелинейные зависимости:

Еще один интересный график иллюстрирует воздействие шумов на MIC:

В нашем случае мы имеем дело с расчетом MIC, когда переменная Aov у нас непрерывная, а все остальные дискретны с неупорядоченными значениями, например тип браузера. Для корректного расчета MIC понадобится дискретизация переменной Aov. Мы воспользуемся готовым решением с сайта exploredata.net . Есть с этим решением одна проблема: она считает, что обе переменные непрерывны и выражены в значениях Float. Поэтому нам придется обмануть код, кодируя значения дискретных величин во Float и случайно меняя порядок этих величин. Для этого придется сделать много итераций со случайным порядком (мы сделаем 100), а в качестве результата возьмем максимальное значение MIC.

Ну вот мы близки к финалу, теперь осуществим сам расчет:

На выходе:
Для эксперимента я добавил случайную величину с равномерным распределением и сам AOV.
Как мы видим, практически все MIC оказались ниже случайной величины (random MIC), что можно считать «условным» порогом принятия решения. Aov MIC равен практически единице, что естественно, так как корреляция самой к себе равна 1.

Возникает интересный вопрос: почему мы на графиках видим зависимость, а MIC нулевой? Можно придумать множество гипотез, но скорее всего для случая os Family все довольно просто — количество машин с Windows намного превышает количество остальных:

Заключение

Надеюсь, что Scala получит свою популярность среди аналитиков данных (Data Scientists). Это очень удобно, так как есть возможность работать со стандартным IPython notebook + получить все возможности Spark. Этот код может спокойно работать с терабайтными массивами данных, для этого нужно просто изменить строчку конфигурации в ISpark, указав URI вашего кластера.

Быстрый старт со Scala для начинающих и не очень

Scala – строгий статически типизированный JVM-based язык, успешно совмещающий парадигмы объектно-ориентированного и функционального программирования. В языке есть классы, функции высшего порядка, анонимные функции, обобщенное программирование. Использование Java-кода из Scala не вызывает трудностей, синтаксически языки очень близки. В этой статье мы разберем основные элементы языка, достаточные для того, чтобы начать на нем писать.

Настройка окружения

Scala — язык, работающий на JVM, поэтому для работы требует установленную JDK (минимальная версия 1.6). Ее можно взять отсюда. После установки JDK можно приступить к установке самой Scala. Скачать свежую версию можно на официальном сайте. Последняя версия на момент написания статьи — 2.11.6.

Для того, чтобы все корректно работало из командной строки, рекомендуется прописать переменные среды JAVA_HOME и SCALA_HOME , а также дополнить переменную PATH путями к выполняемым файлам. На Linux и MacOS это делается так:

Для того, чтобы сохранить эти настройки, их надо прописать в

На Windows команда немного другая:

Прописать эти опции постоянно можно в настройках системы: Control Panel → Advanced System Settings → Environmental Variables.


4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

После выполнения всех манипуляций можно проверить результат, запустив:

Простые скрипты и маленькие программы можно, конечно, компилировать и запускать вручную с помощью команд scalac и scala . Однако, по мере того, как количество файлов будет расти, ручная компиляция будет становиться все более нудной. Вместо этого используют системы сборки. Для сборки кода на Scala можно использовать стандартные для Java (неофициально) maven, gradle или ant, но сообщество и сами разработчики рекомендуют sbt (simple build tool).

Примечание: если вы устанавливаете sbt, то можете пропустить отдельную установку scala, так как система сборки скачает ее автоматически

Описание процесса сборки находится либо в файле build.sbt в корне проекта, либо в файлах .scala в папке project там же. Само описание – это программа на Scala (которая, в свою очередь, может собираться с помощью sbt как отдельный проект, который… ну, вы поняли).

Синтаксис .sbt -файла напоминает синтаксис Scala с некоторыми дополнениями и ограничениями. Минимальный build.sbt выглядит примерно так (пустые строки обязательны):

Исходники помещаются в папку src/main/scala и src/test/scala по пути, соответствующем иерархии пакетов (как в Java). Чтобы собрать, протестировать и запустить проект, необходимо в любой поддиректории проекта выполнить следующие команды:

или через интерактивную консоль:

Последовательное выполнение команд выглядит немного необычно (обратите внимание на точку с запятой в начале — это особенность синтаксиса):

Отличным помощником в разработке будет REPL (Read-Eval-Print-Loop), или по-другому, интерактивная консоль. Очень удобно проверять в ней небольшие функции, отлаживать код или просто посмотреть возможности языка. Для запуска REPL наберите sbt console в командной строке. Вы увидите примерно следующее:

Все! Можно писать команды на Scala и сразу же их выполнять:

Для выхода из REPL можно нажать Ctrl+D. Все примеры на Scala далее можно протестировать в REPL, для вставки больших кусков кода можно воспользоваться командой :paste .

Использование IDE для разработки на Scala не обязательно, однако сильно упрощает процесс. Скала — язык со сложной семантикой, поэтому возможности IDE более ограничены, чем, скажем, при разработке на Java. Тем не менее даже простая подсветка несуществующих методов и автодополнение существующих может сильно облегчить жизнь. Самые популярные IDE для Scala — это IntelliJ IDEA и Eclipse. Для IDEA есть плагин от JetBrains, в случае с Eclipse есть ее вариант Scala IDE.

Мастер Йода рекомендует:  Как в Photoshop создать анимированное GIF-изображение

Переменные, значения и типы.

В Scala переменные и значения объявляются ключевым словом val или var . val — это неизменяемая переменная (значение), аналог final в Java. var — обычная переменная. Например:

Аналогичный код на Java будет выглядеть так:

Здесь мы видим сразу несколько приятных особенностей Scala:

  1. точка с запятой не обязательна (работает автоматический вывод);
  2. указания типа переменной необязательно (также работает автоматический вывод типов);
  3. ключевое слово public подразумевается по умолчанию.

Типы переменных указываются после имени, через двоеточие. Также в Scala нет, как таковых, примитивных типов ( int , float , boolean и т.д.). Их заменяют соответствующие классы Int , Float , Boolean и т.д. Любая переменная — экземпляр какого-либо класса. Иерархия классов начинается с Any , все классы наследуются от него (аналог Object в Java).

Применение привычных операторов, при этом, на самом деле — вызов метода: a + b тождественно a.+(b) . Вариант записи без точки применим к любым методам (с некоторыми ограничениями).

Функции, анонимные функции, методы

Функция в Scala объявляется с помощью ключевого слова def . Пример объявления и применения функции:

Аналогичный код на Java:

Как видно на примере, необязательны не только точка с запятой и указание типа, но и фигурные скобки вокруг единственного выражения и слово return . Более того, его использование считается плохой практикой. Из функции возвращается значение последней выполненной команды.

На самом деле, функция — это тоже объект. Каждая функция в Scala — это экземпляр класса Function , у которого есть метод apply . Поэтому мы вполне можем записать так (знак подчеркивания ставится на место аргумента функции):

Вызов метода apply подразумевается по умолчанию, поэтому использование функций внешне выглядит как в Java:

Все четыре вызова функции идентичны. Представление функций в виде объектов позволяет оперировать с ними, как с остальными объектами: передавать в качестве аргументов, возвращать из других функций, расширять дополнительными методами и т.д., что позволяет Scala полноценно поддерживать парадигму функционального программирования.

Конечно, присутствуют анонимные функции (лямбда-функции). Они объявляются так:

Здесь мы объявляем анонимную функцию, которая принимает один целочисленный аргумент и присвоил ее переменной f , после чего применяем f как обычную функцию.

Классы и объекты

Если вы программировали на Java, многие вещи, касающиеся объектно-ориентированного программирования будут вам знакомы. Класс объявляется ключевым словом class , новый экземпляр — через new . Методы класса — это функции, объявленные в его теле. Поля класса указываются сразу после имени, как список аргументов. При этом, по умолчанию они объявляются как private val . То есть, если мы не укажем никаких модификаторов, указанное поле будет доступно только внутри класса и будет неизменяемым. Класс можно сделать абстрактным, добавив abstract перед объявлением. Основное отличие от Java здесь заключается в отсутствии конструктора. Код, который должен выполняться при создании объекта, пишется прямо в теле класса. Как при этом реализовать несколько конструкторов с различным числом аргументов, мы рассмотрим позже. Пример использования класса:

И аналогичный код на Java:

Как видим, public указывать не обязательно, аргументы конструктора доступны во всем классе, локальное приватное поле создавать также не обязательно.

Кроме того, в Scala мы можем объявить сразу объект, без создания класса, с помощью ключевого слова object . Таким образом реализуется паттерн «Одиночка» (Singleton).

Аналог на Java будет куда более многословен.

В этом примере мы пометили конструктор как protected , чтобы исключить возможность его вызова извне, обращение к объекту будет осуществляться через метод getInstance() , который при первом своем вызове инициализирует экземпляр класс, а при последующих возвращает уже созданный экземпляр. Кроме того, вполне допустимо существование объекта и класса с одним и тем же именем, при этом они делят область видимости. Поэтому необходимость в директиве static отпадает — методы, объявленные не в классе, а в объекте ведут себя как статические. Такой объект называется в терминологии Scala «companion object» («объект-компаньон»).

Вернемся к конструкторам. Вспомним, что при применении любого объекта к некоторым аргументам по умолчанию вызывается метод apply . Этим мы и воспользуемся и напишем класс с несколькими конструкторами, статическими методами, изменяемыми и неизменяемыми полями в идиоматичном для Scala стиле и продублируем этот же код на Java.

Интерефейсы и трейты

Аналогом Java-интерфейса в Scala является трейт (trait). Как ни удивительно, объявляется он с помощью ключевого слова trait . Как и интерфейсы Java, трейты содержат только объявления методов и допускают множественное наследование. В отличие от интерфейса, в трейте можно описывать поля класса и частично реализовывать методы. Наследование как трейтов, так и абстрактных классов осуществляется с помощью extend (первый родитель) и with (последующие родители). Пример использования:

Ключевое слово override необязательно, но его использование является хорошей практикой.

Другие особенности и отличия от Java

Как и в Java, в Scala классы, трейты и функции можно параметризовать. Параметры типов пишутся в квадратных скобках после имени класса или функции. Так определяется интерфейс Foo , который принимает некоторый тип A и содержит метод bar ? который принимает значение типа A и некоторого типа B и возвращает объект типа C . Конкретные типы A , B и C будут определены в реализации интерфейса.

Конструкция if / else всегда возвращает значение выражения, которое стоит последним ввыполняемом блоке. Скобки вокруг условия обязательны, скобки вокруг тела, в котором только одна инструкция, можно опустить.

Блок try / catch / finally выглядит в Scala так:

Циклы while ничем не отличаются от варианта в Java:

А циклы for — наоборот, совсем не похожи (о них мы подробнее поговорим в следующей статье):

Также вы, возможно, могли заметить литерал . . Он имеет тип Nothing который является подкласс любого класса. При вызове . кидает исключение NotImplemented . Это примерно аналог undefined в Python. . можно ставить в качестве заглушки вместо тела функции, к написанию которого вы планируете вернуться позже.

Заключение

Итак, мы установили и настроили среду разработки для Scala, посмотрели основные элементы языка, сходства с Java и отличия от нее. Этого вполне должно хватить для того, чтобы начать писать простой и рабочий код. В следующей статье мы подробнее рассмотрим элементы функционального программирования, case-классы, pattern-matching и другие высокоуровневые особенности языка.

30 книг о Big Data и анализе данных

На волне популярности Big Data появилось такое количество изданий, посвященных этой теме, что выбрать действительно хорошие книги по big data очень сложно. Мы отобрали для вас лучшие.

Работа с Big Data требует хорошей теоретической подготовки и опыта. Набраться последнего можно на коммерческом проекте, перебирая массивы открытых данных или выполняя задания на Kaggle. За теорией добро пожаловать в мир обучающих ресурсов, курсов и блогов, посвященных работе с информацией. Мне больше нравится, когда умные люди уже собрали, переварили и разложили по полочкам всё что нужно. Поэтому я предпочитаю книги.

Первое знакомство с технологиями Big Data

1 «The Human Face of Big Data», Rick Smolan и Jennifer Erwitt

Книга рассказывает о том, как большие данные способны приносить пользу и менять мир к лучшему. Как работа с информацией повлияла на бизнес, науку, деятельность правительства, здравоохранение и повседневную жизнь. Содержит множество фотографий, поэтому легко воспринимается.

Отзывы читателей:

В целом, восторженные. Читатели называют эту книгу, прежде всего, захватывающей. Легко читается, содержит изумительные иллюстрации, рисует прекрасное и светлое будущее, которое принесет миру анализ данных. Одним словом, издание будет отличным подарком гику или любому человеку, связанному с анализом данных.

2 «Big Data: A Revolution That Will Transform How We Live, Work, and Think», Viktor Mayer-Schönberger и Kenneth Cukier

Книга начинается с истории о Google, который в 2009 году сопоставил данные американского Центра по контролю и профилактике заболеваний с частотой поисковых запросов вроде «сопли кашель температура» и научился предсказывать эпидемию гриппа. Авторы — оксфордский профессор Виктор Майер-Шонбергер и редактор The Economist Кеннет Какьер — называют себя вестниками божьими Big Data и утверждают, что мир скоро изменится. Но книга — не просто гимн новым технологиям: в ней нашлось место и восторгам насчет возможностей применения Big Data на благо людей, и опасениям за их безопасность и право на тайну личной переписки.


«Big Data…» написана для широкой публики и не требует для чтения специальных познаний. В большей степени представляет собой рассуждения авторов, но содержит и примеры использования технологий анализа данных в бизнесе.

Отзывы читателей:

Издание хвалят за доступное изложение сложных примеров, которые будут понятны любому читателю. В то же время, кто-то ругает автора за слишком долгое «раскачивание» и большой размер вводных глав. Один из главных минусов — маленькое количество реальных примеров и частое повторение одних и тех же мыслей.

3 «Data Analytics Made Accessible», Anil Maheshwari

Книга написана разговорным языком, читается легко. Она охватывает основные аспекты активно развивающейся отрасли анализа данных: хранилища, алгоритмы выявления взаимосвязей, способы визуализации, социальные графы, нейросети и разбор неструктурированного текста. Каждая часть начинается с примера из реальной жизни — Netflix, WhatsApp, IBM Watson — и заканчивается тематическими заданиями. В качестве бонуса прилагается руководство по языку R для начинающих.

После прочтения вы сможете самостоятельно реализовать все этапы анализа данных: от планирования исследования до выдвижения гипотезы и ее проверки.

Отзывы читателей:

В основном положительные, почти все отмечают чрезвычайно понятное изложение сложных терминов и алгоритмов, что сильно снижает входной порог для новичков.

4 «Predictive Analytics: The Power to Predict Who Will Click, Buy, Lie, or Die», Eric Siegel и Thomas H. Davenport

Автор «Предсказательной аналитики» — редактор The Predictive Analytics Times Эрик Сигель, рассказывает удивительные вещи:

  • Facebook перебирает по 1500 публикаций на каждого человека, определяя самые интересные для него новости;
  • Microsoft умеет предсказывать местоположение человека в определенной точке на несколько лет вперед, отталкиваясь от генерируемых им повседневных GPS-данных;
  • cтраховые компании в США за 18 месяцев до вероятной даты смерти человека предлагают заключить договор медицинского обслуживания последних лет жизни.

Книга пронизана примерами использования предсказательной аналитики компаниями и государственными учреждениями: от механизма подбора контактов на LinkedIn до подробностей применения данной технологии в ходе избирательной кампании Барака Обамы.

Отзывы читателей:

В основном отмечают полезность информации о том, где именно применяются конкретные алгоритмы (деревья решений, регрессия ).

Интеллектуальный анализ данных, алгоритмы, майнинг

5 «Data Smart: Using Data Science to Transform Information into Insight», John W. Foreman

Автор утверждает, что большинство руководителей фирм подходят к аналитике неправильно: закупают дорогие программные комплексы и нанимают консультантов. Они тратят немалые деньги еще до того, как поймут, что на самом деле желают получить в результате. Стоп, говорит автор — ведущий аналитик Mailchimp, который раньше работал на Coca-Cola, Intercontinental и ФБР — вдохните и выдохните, всё куда проще. Для большинства случаев достаточно обычного Excel, ведь он куда мощнее, чем кажется на первый взгляд.

Эта книга — не о хранилищах данных, навороченных программных комплексах и суровом программировании. Она фокусируется, прежде всего, на методах. Вы познакомитесь с математической оптимизацией и генетическими алгоритмами, методами кластеризации данных, прогнозирования, способами сезонных корректировок и другими подходами, которые с помощью Excel помогут превратить набор данных в источник полезной информации.

Книга ориентирована на руководителей, маркетологов и аналитиков компаний различных масштабов. Она научит не бояться массива данных и подскажет, как его использовать для принятия грамотных управленческих решений.

Отзывы читателей:

Примечателен один отзыв, который написал друг автора. Он лучше всего описал суть. Есть три типа книг об анализе данных:

  • Слишком технические с большим количеством греческих букв и знаков суммы
  • Бизнес книги о том, как данные совершат революцию
  • Технические книги о последних популярных технологиях анализа (R, Hadoop)

Эта же книга — для простых людей, которые хотят научиться анализу данных, прочитав описанные на пальцах алгоритмы.

6 «The Elements of Statistical Learning: Data Mining, Inference, and Prediction», Trevor Hastie, Robert Tibshirani и Jerome Friedman

«Элементы статистического обучения» — фундаментальный теоретический труд, который описывает принципы, лежащие в основе работы с большими данными. В этой книге вы не встретите ни строчки на Python или R. Вас ожидают формулы, графики и еще раз формулы.

Книга предназначена суровым теоретикам и тем практикам-энтузиастам, кто хотел бы углубить познания в математической статистике. Она охватывает большое количество смежных областей: машинное обучение с учителем и без, нейронные сети, деревья решений, метод опорных векторов и ансамбли моделей. Издание считается одним из стандартов области, ссылки на него часто встречаются в статьях и книгах об анализе данных.

На сайте Стэнфордского университета её можно скачать бесплатно и, что немаловажно, законно.

Отзывы читателей:

Книга не содержит готовых рецептов, которые можно применить для своих задач. Нет, она предназначена для глубокого понимания анализа данных и его фундаментальных основ.

7 «Introduction to Data Mining», Pang-Ning Tan, Michael Steinbach и Vipin Kumar

Книга погружает читателя в технологии анализа данных постепенно, от простого к сложному. Первые главы посвящены тому, что такое данные, какими они бывают, как подготовить их к обработке, что такое сводная статистика, визуализация и OLAP — описывают минимум, необходимый для быстрого извлечения знаний из массива информации. Затем авторы переходят к методам классификации, кластеризации и ассоциативному анализу.

Подходит для тех, кто сталкивается с анализом данных впервые. Минимум математики, максимум внятных разъяснений и иллюстраций.

Отзывы читателей:

Еще одна книга с поэтапным, визуальным и понятным объяснением сложных алгоритмов без слишком большого количества непонятных формул.

8 «Big Data: Principles and best practices of scalable realtime data systems», Nathan Marz и James Warren

Автор этой книги — Натан Марц — один из пяти членов команды социального агрегатора BackType, который в 2011 году был куплен Twitter. Всего 5 человек справлялись с оперативной аналитикой 100 терабайт данных, настройкой, мониторингом и обслуживанием кластера из сотен машин. На вопрос коллег, как им это удается столь малыми силами, Марц обычно отвечал: «Дело не в том, что мы делаем, а в том, что не делаем».

Стандартная архитектура систем обработки данных слишком сложна и уязвима, и чем данных больше, тем больше проблем. Марц предлагает новый подход к организации хранения и обработки данных — простую и надежную лямбда-архитектуру, которую он подробно описывает в книге. Для ее реализации автор использует открытые инструменты: Hadoop, Cassandra, Cascalog, ElephantDB и Storm с Trident.

Как говорит автор: «Было бы здорово, если бы я мог прочитать эту книгу перед началом моей работы с Big Data. Это сделало бы ее простой и увлекательной».

Отзывы читателей:

Профессионалы отмечают полезность технологий организации обработки больших массивов данных и грамотного построения архитектуры таких систем.

Big Data и бизнес

Технологии Big Data позволяют обрабатывать значительные объемы информации, накопленные организациями и принимать на их основе более взвешенные управленческие решения, лучше понимать своих клиентов и бизнес-процессы. Книги из этого раздела популярно рассказывают о том, зачем использовать Big Data и как создать необходимую инфраструктуру внутри компании, демонстрируют реальные примеры использования аналитики для повышения эффективности организаций.

9 «Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking», Foster Provost и Tom Fawcett

Книга основана на материалах курса MBA, который Фостер Провост читал в Нью-Йоркском университете. Описанные автором принципы иллюстрируются решением реальных проблем, стоявших перед компаниями. Эта книга учит относиться к большим данным как к бизнес-активу, и помогает понять, как наладить связь между менеджментом и аналитиками-технарями.

В книге нет загадочной телепортации от пункта «проблема» до пункта «решение». В ней не только описана каждая проблема и то, что позволило с ней справиться, но и ход мыслей специалиста, который привел к выбору того или иного способа решения задачи. Ведь принципы и идеи иногда важнее готовых рецептов.

Книга была отмечена Harvard Business Review, как одна из лучших работ по этой теме. Она довольно насыщена материалом и ее чтение потребует высокого уровня концентрации, но вам не потребуется техническое образование, чтобы получить пользу от изложенного в ней материала.

Отзывы читателей:

Лучше всего книгу характеризует список того, чего в ней нет:

  • Это не сборник дифференциальных уравнений
  • Здесь не будет пошаговых рецептов без объяснения их сути
  • Это не книга для менеджеров, которым нужно разобраться в новом хайпе

10 «Big Data at Work: Dispelling the Myths, Uncovering the Opportunities», Thomas H. Davenport

Книга «Big Data at Work» идеальна для управленцев, которые планируют интегрировать аналитический отдел в структуру компании. В ней представлено множество советов: дан поэтапный план внедрения методик анализа больших данных в компании, описаны технологии обработки информации и процесс найма специалистов. Словом, книга ориентирована на управляющих, перед которыми стоит задача поставить процесс анализа данных на поток. Один из отзывов лучше всего описывает ее достоинства:

«Big Data at Work» — первая и единственная книга, описывающая, как реальные организации применяют технологии анализа Больших Данных, извлекая из них ценность

В книге приведено много полезных примеров от таких компаний, как UPS, GE, Amazon, United Healthcare, Citigroup и др.

11 «Too Big to Ignore: The Business Case for Big Data», Phil Simon

Too Big to Ignore ориентирована на CIOs, CEOs и ITшников. Автор книги, Phil Simon обладает сверхъестественной способностью соединять бизнес кейсы со сложными техническими терминами, и, что самое важное, ясно объяснять, как все взаимодействует. В своей книге он демистифицирует термин «Big Data», раскладывая по полочкам технологии, решения, ПО и их вендоров и др.

Отзывы читателей:

Проста для понимания, подойдет специалистам с любым уровнем знаний.


Spark

Apache Spark — программное обеспечение с открытым исходным кодом для реализации распределённой обработки неструктурированных и слабоструктурированных данных.

12 «Learning Spark: Lightning-Fast Big Data Analysis», Holden Karau, Andy Konwinski, Patrick Wendell и Matei Zaharia

Книга написана разработчиками Apache Spark и будет полезна инженерам и специалистам, работающим с большими объемами данных. В издании представлены приемы обработки данных с помощью простых API в Python, Java и Scala. Кроме того, это издание включает в себя информацию о Spark SQL, Spark Streaming, и Maven. Вы научитесь запускать параллельные задачи несколькими строками кода и написанию приложений, которые выполняют как простые задачи, так и требующие методов машинного обучения. Короткий список преимуществ книги:

  • Быстрое погружение в возможности Spark, такие как распределенные массивы данных, кеширование в памяти, и работа с командной строкой
  • Использование одной программной парадигмы вместо смешивания таких инструментов, как Hive, Hadoop, Mahout, и Storm
  • Развертывание интерактивных, пакетных и потоковых приложений
  • Коннекторы к различным источникам данных: HDFS, Hive, JSON, и S3

Примеры, описанные в книге, вы сможете найти на github.

Отзывы читателей:

Некоторые программисты отмечают поверхностность примеров и их скупое объяснение. Тем не менее, все отмечают, что книга будет хорошим началом для погружения в Spark.

13 «Advanced Analytics with Spark: Patterns for Learning from Data at Scale», Sandy Ryza, Uri Laserson, Sean Owen и Josh Wills

Эта книга написана четырьмя специалистами компании Cloudera и представляет современную платформу для управления данными и их анализа. «Advanced Analytics with Spark» — это руководство, в котором собраны различные шаблоны для анализа больших объемов данных с помощью Spark.

Начав с общего знакомства с технологией, вы постепенно углубитесь в методы классификаций, коллаборативной фильтрации и методы поиска аномалий, которые применяются в генетике и в сфере финансовой безопасности. Для реализации примеров используются Java, Python и Scala.

В книге описаны 9 тематических исследований в различных областях, основанные на реальных данных. Вы узнаете:

  • Как исследуется трафик такси в Нью-Йорке
  • Алгоритмы рекомендации музыки
  • Как предсказывается состояние лесного покрова с помощью алгоритма «деревья решений»
  • Понимание контента Википедии
  • Анализ данных генома и проекта BDG
  • Моделирование финансового риска с помощью метода Монте-Карло
  • Применение анализа данных в нейробиологии с помощью PySpark и Thunder.

Отзывы читателей:

Прекрасное пошаговое руководство для глубокого погружения в анализ данных и Spark.

Аналитика на Python

Python — гибкий язык с простым синтаксисом, для которого создано огромное количество мощных библиотек для машинного обучения и визуализации данных с открытым исходным кодом.

14 «Python Machine Learning», Sebastian Raschka

Это руководство создано для тех, кто стремится расширить свое понимание технической стороны работы с предсказательной аналитикой на языке Python. Книга выгодно отличается от похожих изданий шириной охватываемых вопросов и большим количеством наглядных примеров, которые помогут освоить излагаемые методы и инструменты.

Издание подойдет для инженеров с любым уровнем знаний в машинном обучении: от начального до профессионального. Вы научитесь:

  • Использовать различные аналитические модели
  • Строить нейронные сети с помощью Pylearn 2 and Theano
  • Применять регрессионный анализ
  • Улучшать веб-приложения с помощью машинного обучения
  • Открывать скрытые паттерны и структуры в данных с помощью кластеризации
  • Эффективной предварительной обработке данных
  • Применять анализ социальных данных для определения настроений аудитории

Отзывы читателей:

Эту книгу описывают не иначе, как текстовый эквивалент нейронной сети с тысячами скрытых слоев, которую запустили на Nvidea GPU последнего поколения. Она подойдет программистам с любым уровнем знаний: и начинающий, и профессионал откроют для себя много новых алгоритмов на Python.

15 «Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython», Wes McKinney

Еще одна книга о Python в контексте Big Data, но она не об аналитических методах и не о концепциях и методах работы с данными, а об инструментах, которые Python может дать аналитику. Книга написана ведущим автором библиотеки «Pandas» (Python Data Analysis Library).

Вы научитесь использовать интерактивную оболочку IPython как основную среду разработки, освоите функции NumPy, познакомитесь с аналитическими инструментами, входящими в Pandas, и другими возможностями этой библиотеки.

Автор предполагает, что вы в достаточной степени знакомы с используемым языком и не останавливается на базовых моментах.

Вы научитесь использовать высокоэффективные инструменты для загрузки, хранения и обработки данных, познакомитесь со статичной и интерактивной визуализацией, а в качестве бонуса увидите, как решаются сложные задачи в веб-аналитике, социальных науках, финансах и экономике.

Отзывы о книге:

Самые разные. Положительные стороны, которые отмечают читатели: проста для понимания, дает хорошие фундаментальные знания. Отрицательные моменты: ошибки в коде (ближе к концу книги).

16 Data Science from Scratch: First Principles with Python

Библиотеки, фреймворки и различные инструменты для работы с данными безусловно, хороши для погружения в практический анализ данных, но есть шанс того, что вы будете их применять без фактического понимания науки о данных (Data science). С этой книгой вы изучите применение инструментов и алгоритмов с нуля.

Если у вас есть способности к математике и практические навыки программирования, автор поможет разобраться с математикой и статистикой науки о данных. Краткое содержание книги:

  • Вводный курс в Python
  • Изучение основ линейной алгебры, статистики и понимание того как и где они применяются в науке о данных
  • Сбор, исследование, очистка и др. манипуляции с данными
  • Погружение в фундаментальные основы машинного обучения
  • Написание на Python различных моделей: k-nearest Neighbors, Naive Bayes, линейная и логистическая регрессия, деревья решений, нейронные сети, и кластеризация данных
  • Рекомендательные системы, обработка естественного языка, MapReduce и др.

Отзывы читателей:

Положительные. Один программист с 10-ти летним опытов отметил книгу лучшей среди похожих для тех, кто хочет научиться анализу данных на Python.

Визуализация данных

Визуализация данных — неотъемлемый аспект big data. Грамотное представление данных, собранных в результате исследования, значительно упрощает процесс формирования и обоснования гипотезы, помогает объяснить свою позицию коллегам и упрощает обработку данных.

17 «Storytelling with Data: A Data Visualization Guide for Business Professionals», Cole Nussbaumer Knaflic

Книга научит вас основам визуализации данных и покажет, как сделать их эффективным подспорьем для создания различных презентаций. Вы будете учиться визуализировать данные на реальных примерах, улучшите свое понимание контекста и аудитории, сможете легко определять оптимальный способ подачи информации, научитесь очищать свои презентации от загромождающих элементов и привлекать внимание аудитории к ключевым моментам.

Автор делает акцент на эстетическом аспекте представления результатов, предлагая вам взглянуть на это глазами дизайнера, и научит вас использовать дизайнерские концепции для визуализации.

Hadoop

Hadoop — проект, созданный Apache Software Foundation. Это набор инструментов, распространяющийся на бесплатной основе, основная задача которого — разработка и выполнение распределённых программ, работающих на кластерах из сотен и тысяч узлов.

18 «Hadoop for Dummies», Dirk Deroos, Paul C. Zikopoulos, Roman B. Melnyk

Этот учебник, как понятно из названия, ориентирован на тех, кто только начинает свое знакомство с Hadoop. Издание простым языком объясняет ценность Big Data и рассказывает историю появления Hadoop, описывает его преимущества, функциональность и показывает приемы его практического использования. Кроме того, книга знакомит вас с кластерами, шаблонами проектирования и экосистемой Hadoop.

В этой книге вы найдете:

  • Описание экосистемы Hadoop 2 и Yarn;
  • Примеры реального использования, которые помогут вам начать работу;
  • Подробную информацию об установке кластера;
  • Руководство по использованию Oozie для планирования рабочих процессов;
  • Информацию о том, как добавить структуру из Hive или HBase;
  • Подробную информацию о работе с SQL и Hive;
  • Информацию о развертывании Hadoop в облаке;
  • Информацию о проблемах, с которыми сталкиваются администраторы.

Отзывы читателей:

Их практически нет, а те что есть, довольно скупы.

19 «Hadoop: The Definitive Guide», Tom White

Это практическое руководство по использованию одного из самых мощных наборов инструментов, распространяющихся на бесплатной основе. Разработчики найдут полезную информацию об анализе больших массивов данных, а администраторы научатся создавать и настраивать кластеры Hadoop.

В книге представлено огромное количество тематических исследований, иллюстрирующих то, как Hadoop решает конкретные задачи. Она научит вас использовать Hadoop Distributed File System (HDFS) для хранения больших массивов данных и выполнения распределенных вычислений над ними. Расскажет о возможностях использования MapReduce и распространенных ошибках, которые встречаются при работе с этой моделью. Вы узнаете, как спроектировать, создать и настроить кластер Hadoop, как запустить Hadoop в облаке и многое другое. Последнее издание включает в себя разделы, посвященные таким инструментам экосистемы, как Pig, Hive, HBase, ZooKeeper и Scoop.

Отзывы читателей:

Есть несколько негативных отзывов, которые отмечают различные недостатки: мешанина различных стилей, примеры кода без названия файлов, устаревшая местами информация и др.

20 «Hadoop Operations», Eric Sammer

Если вы планируете работать с большими и сложными кластерами Hadoop, эта книга обязательна для вас. Она написана Эриком Заммером, главным архитектором Cloudera, и охватывает все этапы от планирования и создания, до настройки и постоянного сопровождения кластера.

Мастер Йода рекомендует:  Когда скончалась фантазия подборка идей для создания проекта


В первую очередь книга рассчитана на администраторов, но и разработчики найдут в ней много интересного. Ваше знакомство с Hadoop начнется с установки и настройки всего исчерпывающее представление о HDFS и MapReduce; пройдете все этапы развертывания Hadoop, начиная с выбора аппаратного обеспечения и операционной системы; научитесь управлять ресурсами с помощью разделения входных данных между непересекающимися группами; узнаете о поддержке и резервном копировании созданных систем на реальных примерах.

Отзывы читателей:

Положительные. Так как книга написана архитекторов Cloudera, в ней отражен весь опыт работы этой компании с Hadoop. Рассматривается множество ньюансов, узких мест экосистемы и возможных проблем.

21 «Hadoop in Practice», Alex Holmes

Руководство содержит в себе 85 проверенных примеров, поданных в формате проблема-решение. Автор достаточно хорошо балансирует между описанием фундаментальных основ и практических примеров с погружением в аспекты технологии. Вы будете изучать каждое решение поэтапно, что поможет лучше понять принципы построения той или иной модели.

Книга научит вас не только решать практические задачи, но и думать таким образом, чтобы суметь превратить набор данных в четко структурированную базу, с которой легко работать.

В книге вы найдете:

  • Исчерпывающий обзор Hadoop и MapReduce;
  • 85 практических, проверенных методик;
  • Реальные проблемы и их решения;
  • Подробную инструкцию для интеграции MapReduce и R.

Отзывы читателей:

Купившие книгу отмечают устаревшую местами информацию, поэтому будьте внимательны при выборе: покупайте только самое последнее издание, выпущенное не более чем год назад.

22 «Professional Hadoop Solutions», Boris Lublinsky, Kevin T. Smith и Alexey Yakubovich

Эта книга, написанная командой опытных разработчиков, представляет собой подробное руководство о Hadoop и интеграции API для решения реально возникающих проблем. Книга рассказывает о хранении данных в HDFS и Hbase, обработке данных с помощью MapReduce и автоматизации работы с информацией с помощью Oozie.

Ее можно назвать исчерпывающим руководством для системных администраторов и разработчиков, работающих с Hadoop:

  • Подробно рассматривает создание стабильных MapReduce приложений, их тестирование и отладку
  • Объясняет, как расширить Oozie и использовать ее для интеграции с enterprise приложениями
  • Описывает как спроектировать Hadoop приложения, которые обрабатывают запросы в реальном времени
  • Показывает, как использовать инструменты безопасности Hadoop: шифрование, аутентификация, авторизация, SSO и аудирование
  • Рассматривает способы запуска Hadoop приложений в облаке Amazon

Отзывы читателей:

Отмечают хорошую «проработку в глубину» описанных выше тем, не рассмотренных в других книгах (Hadoop: The Definitive Guide, Hadoop In Practice).

23 HBase: The Definitive Guide: Random Access to Your Planet-Size Data

HBase используется в экосистеме Hadoop и эта книга научит вас управлять огромными массивами данных с помощью мощного инструмента. HBase является opensource разработкой, которая реализует архитектуру BigTable, которая используется внутри Google. Она устроена таким образом, что может масштабироваться горизонтально для обработки миллионов строк и столбцов без потери скорости чтения и записи. В книге рассматривается большое количество узких вопросов, которые чаще всего возникают при внедрении базы данных в IT инфраструктуру компании:

  • Вы узнаете, как тонко интегрировать Hadoop с HBase, чтобы обеспечить простое масштабирование
  • Как распределять большие наборы данных по большому количеству дешевых однотипных серверов
  • Изучите различные способы подключения к HBase: как стандартные Java клиенты, так и специализированные API интерфейсы для доступа из других сред
  • Узнаете о различных составляющих архитектуры HBase (формат хранения, логи, вторичные индексы, реализация транзакций, интеграция с поиском и др.)
  • Рассмотрите разные вопросы развертывания кластера, его обслуживания и мониторинга
  • И, наконец, сможете углубиться в вопросы быстродействия и управления памятью

24 MapReduce Design Patterns: Building Effective Algorithms and Analytics for Hadoop and Other Systems

Шаблоны проектирования приложений на фреймворке MapReduce разбросаны по различным исследовательским статьям и блогам. Эта книга избавит вас от необходимости перелопачивать различные источники: в ней собраны основные принципы проектирования и построения программ на MapReduce.

Каждый пример рассматривается в определенном контексте, чтобы вы смогли избежать частые ошибки, с которыми можно столкнутся. Вот некоторые типы шаблонов, которые описываются:

  • Группировка и агрегирование
  • Фильтрация данных от определенных пользователей
  • Шаблоны структурирования для работы с другими системами и упрощения анализа
  • Шаблоны соединения — анализ различных наборов данных вместе для поиска взаимосвязей
  • Мета-шаблоны: соединение вместе нескольких шаблонов для задач анализа в одном процессе
  • Шаблоны загрузки, выгрузки и хранения данных

Отзывы читателей:

Есть несколько негативных отзывов, которые указывают на низкое качество технической составляющей книги. «Издательство O’Reilly еще никогда не было столь непрофессионально» — самый безобидный из эпитетов читателей.

25 Programming Hive: Data Warehouse and Query Language for Hadoop

Книга в подробностях описывает работу с Hive — надстройкой над MapReduce, которая позволяет писать SQL-подобные запросы к распределенной системе. Эта книга — самое исчерпывающее руководство по Hive, включает в себя все аспекты работы с технологией:

  • Создание таблиц, изменение их структуры, партиционирование и другие действия, знакомые из SQL
  • Различные манипуляции с данными
  • Синтаксис запросов, похожий на SQL
  • Создание представлений (Views), индексов, тем (schema)
  • Написание функций и управление потоками
  • Вопросы безопасности
  • Интеграция Hive с Oozie, Amazon Web Services и др.

26 Programming Pig

Книга посвящена Apache Pig. Этот инструмент позволяет легко организовать параллельные потоки данных в экосистеме Hadoop. С Pig вы сможете легко создавать несколько параллельных сценариев обработки данных.

Издание подойдет как начинающим, так и продвинутым программистам. В нем описаны основы и полностью рассмотрены различные аспекты Pig:

  • Модели данных: скалярные и сложные типы
  • Написание Pig Latin скриптов для сортировки, группировки, фильтрации и др. методов обработки
  • Использование Grunt в Hadoop
  • Встраивание скриптов Pig Latin в Python для выполнения итеративных алгоритмов
  • Создание своих функций загрузки и хранения данных
  • Вопросы быстродействия

Отзывы читателей: Отрицательные. Отмечают сумбурность изложения, которая больше похожа на записи в блоге, нежели последовательное введение в тему.

27 Hadoop Application Architectures: Designing Real-World Big Data Applications

В то время как многие книги рассказывают только о применении различных компонентов экосистемы Hadoop, эта научит вас построению грамотной архитектуры конкретно под ваши задачи.

Вторая часть посвящена подробному описанию наиболее часто встречающихся архитектур существующих приложений на Hadoop. Книга также покрывает следующие вопросы:

  • Факторы, которые указывают на необходимость использования Hadoop
  • Лучшие практики загрузки и выгрузки данных из системы
  • Различные фреймворки обработки данных: MapReduce, Spark, Hive
  • Часто встречающиейся шаблоны обработки данных
  • Giraph, GraphX и др. инструменты для обработки больших графов на Hadoop
  • Использование различных инструментов планировки задач (Apache Oozie и др.)
  • Обработка больших объемов данных в реальном времени с помощьюApache Storm, Apache Spark Streaming, and Apache Flume

Отзывы читателей:

Крайне мало отзывов, в основном положительные.

Язык R

R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU.

28 «R Cookbook (O’Reilly Cookbooks)», Paul Teetor

Книга содержит в себе более чем 200 практических рецептов быстрого и эффективного анализа данных с помощью языка R. Этот язык довольно сложен для полного освоения, но применение готовых решений из этого издания поможет вам начать использовать всю его мощь уже сегодня, начиная с задач ввода и вывода данных, заканчивая статистическим анализом и регрессией. Каждый рецепт решает конкретную проблему, что придает изучению языка прикладной характер, способствующий скорейшему усвоению материала. Если вы новичок, эта книга поможет вам начать практическое использование возможностей R, а если у вас уже есть значительный опыт разработки на этом языке — вы сможете улучшить качество своего кода и найти новые способы решения определенных задач.

Материал поможет пройти вам каждый этап обработки данных. В ней приведены техники извлечения данных из CSV и HTML, а потом и из баз данных. Позже вы научитесь использовать средства языка для организации хранения и управления данными.

Если вы ищите книгу для начала знакомства со статистикой, это издание вам определенно не подойдет. R Cookbook предполагает знание различных основных статистических методов и алгоритмов, и только покажет вам, как применять эти методы и алгоритмы в окружении R. Но если вы решили сконцентрироваться на изучении различных методов и инструментов, например, R Graphics, тогда Cookbook от O`Reilly — именно то, что вам нужно.

29 The Art of R Programming: A Tour of Statistical Software Design

Еще одна книга об аналитике на языке R. В ней рассматриваются все аспекты программирования: от самых простых особенностей языка до продвинутых тем (замыкания, рекурсия, анонимные функции и др.). Для того, чтобы начать, вам не потребуются специальные знания статистики или большого опыта программирования. Книга поэтапно расскажет о функциональном и объектно-ориентированном программировании, математическом моделировании, преобразовании данных в разные форматы.

Несколько тем, которые затрагиваются в книге:

  • Создание графики и визуализация
  • Написание параллельного кода на R
  • Интерфейсы для R на C/C++ и Python для увеличения скорости и функциональности
  • Различные пакеты для анализа текста, изображений и многого другого
  • Продвинутые техники отладки

Отзывы читателей:

Один из отзывов написал программист с 12-ти летним опытом работы с языком R. Он отметил, что никогда не встречал ничего подобного знаменитой «K&R», The C Programming Language. Но именно эта книга оказалась достаточно хорошей, чтобы сравнить с «K&R» по уровню качества.

30 R: Easy R Programming for Beginners, Your Step-By-Step Guide To Learning R Progr


Довольно хороший выбор для желающих начать изучать язык R. Книга написана простым языком, без технических жаргонизмов и других вещей, которые делают сложным понимание материала. Авторы придерживаются поэтапного стиля изложения материала, чтобы читатель легко усваивал все тонкие непонятные моменты языка. Короткий список того, что вы изучите с после прочтения:

  • Как установить R и R Studio, а также другие редакторы
  • Основы синтаксиса R
  • Подключение пакетов
  • Представление данных в виде векторов
  • Работа с матрицами, списками и другими структурами
  • Базовая работа с графическим представлением данных и много другое

Изучаем Spark. Молниеносный анализ данных

Автор: Захария М., Венделл П., Конвински Э., Карау Х.
Год: 2015
ISBN: 978-5-97060-323-9
Страниц: 304
Язык: Русский
Формат: PDF
Размер: 15 Мб

Объем обрабатываемых данных во всех областях человеческой деятельности продолжает расти быстрыми темпами. Существуют ли эффективные приемы работы с ним? В этой книге рассказывается об Apache Spark, открытой системе кластерных вычислений, которая позволяет быстро создавать высокопроизводительные программы анализа данных. С помощью Spark вы сможете манипулировать огромными объемами данных посредством простого API на Python, Java и Scala.
Написанная разработчиками Spark, эта книга поможет исследователям данных и программистам быстро включиться в работу. Она рассказывает, как организовать параллельное выполнение заданий всего несколькими строчками кода, и охватывает примеры от простых пакетных приложений до программ, осуществляющих обработку потоковых данных и использующих алгоритмы машинного обучения.
С помощью этой книги вы:

  • познакомитесь с особенностями Spark, такими как распределенные наборы данных, кэширование в памяти и интерактивные оболочки;
  • изучите мощные встроенные библиотеки Spark, включая Spark SQL, Spark Streaming и MLlib;
  • научитесь пользоваться единой парадигмой программирования вместо смеси инструментов, таких как Hive, Hadoop, Mahout и Storm;
  • узнаете, как развертывать интерактивные, пакетные и потоковые приложения;
  • исследуете возможности использования разных источников данных, включая HDFS, Hive, JSON и S3;
  • овладеете продвинутыми приемами программирования на основе Spark, такими как разделение данных на разделы и применение совместно используемых переменных.

Содержание
1 Введение в анализ данных с помощью Spark
2 Загрузка и настройка Spark
3 Программирование операций с RDD
4 Работа с парами ключ/значение
5 Загрузка и сохранение данных
6 Дополнительные возможности Spark
7 Выполнение в кластере
8 Настройка и отладка Spark
9 Spark SQL
10 Spark Streaming
11 Машинное обучение с MLlib

Введение в анализ данных с помощью Spark

Что такое Apache Spark?

Apache Spark – это универсальная и высокопроизводительная кластерная вычислительная платформа.

По производительности Spark превосходит популярные реализации модели MapReduce, попутно обеспечивая поддержку более широкого диапазона типов вычислений, включая интерактивные запросы и потоковую обработку (streaming processing). Скорость играет важную роль при обработке больших объемов данных, так как именно скорость позволяет работать в интерактивном режиме, не тратя минуты или часы на ожидание. Одно из важнейших достоинств Spark, обеспечивающих столь высокую скорость, – способность выполнять вычисления в памяти. Но даже при работе с дисковой памятью Spark выполняет операции намного эффективнее, чем известные механизмы MapReduce.

Фреймворк создавался с целью охватить как можно более широкий диапазон рабочих нагрузок, которые прежде требовали создания отдельных распределенных систем, включая приложения пакетной обработки, циклические алгоритмы, интерактивные запросы и потоковую обработку. Поддерживая все эти виды задач с помощью единого механизма, Spark упрощает и удешевляет объединение разных видов обработки, которые часто необходимо выполнять в едином конвейере обработки данных. Кроме того, он уменьшает бремя обслуживания, поддерживая отдельные инструменты.

Фреймворк Spark предлагает простой API на языках Python, Java, Scala и SQL и богатую коллекцию встроенных библиотек. Он также легко объединяется с другими инструментами обработки больших данных. В частности, Spark может выполняться под управлением кластеров Hadoop и использовать любые источники данных Hadoop, включая Cassandra.

Унифицированный стек

Проект Spark включает множество тесно связанных компонентов. Ядро фреймворка образует его «вычислительный механизм» (computational engine), отвечающий за планирование, распределение и мониторинг приложений, выполняющих множество вычислительных задач на множестве машин – вычислительном кластере. Быстрое и универсальное вычислительное ядро Spark приводит в действие разнообразные высокоуровневые компоненты, специализированные для решения разных задач, таких как выполнение запросов SQL или машинное обучение. Эти компоненты поддерживают тесную интеграцию друг с другом, давая возможность объединять их, подобно библиотекам в программном проекте.

Философия тесной интеграции имеет несколько преимуществ. Во-первых, все библиотеки и высокоуровневые компоненты стека извлекают определенные выгоды от улучшений в слоях более низкого уровня. Например, когда в ядро Spark вносятся какие-то оптимизации, библиотеки поддержки SQL и машинного обучения автоматически увеличивают производительность. Во-вторых, затраты на сопровождение стека минимальны, потому что вместо 5-10 независимых программных систем организации требуется поддерживать
только одну. Эти затраты включают развертывание, сопровождение, тестирование, поддержку и т. д. Это также означает, что при добавлении в стек Spark новых компонентов все организации, использующие Spark, немедленно получают возможность опробовать эти новые компоненты. Это уменьшает затраты на опробование новых видов анализа данных, избавляя организации от необходимости загружать, развертывать и изучать новые программные проекты.

Кто и с какой целью использует Spark?

Так как Spark относится к категории универсальных фреймворков поддержки вычислений в кластерах, он применяется для реализации широкого круга приложений. Во вступлении мы определили две группы читателей, на которых ориентирована наша книга: специалисты в области анализа данных и инженеры-программисты. Давайте теперь поближе познакомимся с обеими группами и с тем, как они используют Spark. Неудивительно, что специалисты в этих двух группах используют Spark по-разному, но мы можем примерно разбить случаи использования на две основные категории – исследование данных и обработка данных.

Загрузка и настройка Spark

Мы рассмотрим процесс загрузки и настройки Spark для работы в локальном режиме на единственном компьютере. Эта глава написана для всех, кто только приступает к изучению Spark, включая исследователей данных и инженеров.

Функциональные возможности Spark можно использовать в программах на Python,Java или Scala. Для успешного усвоения сведений из этой книги необязательно быть опытным программистом, но все же знание базового синтаксиса хотя бы одного из этих языков будет как нельзя кстати. Мы будем включать примеры на всех этих языках, где только возможно.

Сам фреймворк Spark написан на Scala и выполняется под управлением виртуальной машины Java (Java Virtual Machine, JVM). Чтобы запустить Spark на ноутбуке или в кластере, достаточно лишь установить Java версии 6 или выше. Если вы предпочитаете Python API, вам потребуется интерпретатор Python (версии 2.6 или выше). В настоящее время Spark не поддерживает Python 3.

Введение в командные оболочки Spark для Python и Scala

В состав дистрибутива Spark входят интерактивные командные оболочки (shell), позволяющие выполнять специализированные виды анализа. Командные оболочки Spark напоминают любые другие командные оболочки, такие как, например, командные оболочки R, Python и Scala или даже командные оболочки операционных систем, допустим Bash или «Командная строка,> в Windows.

Однако, в отличие от большинства других оболочек, позволяющих манипулировать данными на диске и в памяти единственного компьютера, оболочки Spark дают возможность оперировать данными, распределенными по нескольким компьютерам, при этом все сложности, связанные с распределенным доступом, берет на себя Spark.

Так как Spark может загружать данные в память на множестве рабочих узлов, многие распределенные вычисления, даже на массивах данных, занимающих терабайты, распределенных между десятками компьютеров, выполняются всего несколько секунд. Это делает командную оболочку Spark вполне пригодной для исследования данных в интерактивном режиме. Spark предоставляет оболочки для обоих языков, Python и Scala, которые с успехом могут использоваться в кластерах.

Spark SQL

Мы познакомим вас с компонентом Spark SQL, обеспечивающим интерфейс для работы со структурированными и полуструктурированными данными. Структурированными называют любые данные, имеющие схему, то есть известный набор полей для каждой записи. Когда имеются данные такого типа, Spark SQL не только упрощает загрузку подобных данных, но и делает ее более эффективной. В частности, Spark SQL обладает тремя важными особенностями:

  1. может загружать данные из разных источников (например, JSON, Hive и Parquet);
  2. позволяет запрашивать данные с использованием SQL внутри программ Spark и из внешних инструментов, взаимодействующих с компонентом Spark SQL через стандартные механизмы подключения к базам данных QDBC/ODBC). Примером таких инструментов может служить Tableau;
  3. при использовании внутри программ Spark Spark SQL обеспечивает разнообразный программный интерфейс между SQL и обычным кодом на Python/Java/Scala, включая возможность создания соединений наборов RDD и таблиц SQL, экспортирования функций в SQL и многое другое. Использование такой комбинации часто упрощает разработку заданий.

Для реализации всего этого богатства возможностей Spark SQL определяет специальный тип RDD с именем SchernaRDD. Класс SchernaRDD представляет набор RDD объектов Row, каждый из которых представляет отдельную запись. Тип SchernaRDD также часто называют схемой (то есть списком полей данных) записей. Несмотря на то что SchernaRDD выглядит как обычный набор RDD, внутренне он хранит данные более эффективным способом, используя для этого схему. Кроме того, наборы этого типа поддерживают ряд операций, недоступных в других наборах RDD, такие как выполнение запросов SQL. Наборы типа SchernaRDD можно создавать из внешних источников данных, из результатов запросов и из обычных наборов RDD.

Spark Streaming

Многие приложения получают дополнительное преимущество, если способны обрабатывать данные сразу после их прибытия. Например, приложение может следить за статистикой просмотра страницы в масштабе реального времени, проводить машинное обучение или автоматически определять аномалии. Spark Streaming – это модуль в составе Spark, предназначенный для создания таких приложений. Он дает возможность писать потоковые приложения (streaming applications) с использованием API, очень похожего на тот, что применяется в пакетных заданиях (batch jobs), а значит, и тех же навыков программирования.

Подобно тому, как весь фреймворк Spark построен на понятии наборов данных RDD, Spark Streaming предоставляет собственную абстракцию, которая называется DStreams, или Discretized Streams (дискретизированные потоки). DStream – это последовательность данных, прибывшая за некоторый интервал времени. Внутренне каждый поток DStream представлен последовательностью наборов RDD, прибывших за интервал времени (именно поэтому в названии используется слово «дискретизированный»). Потоки DStream могут создаваться на основе любых источников данных, таких как Flume, Kafka или HDFS. После создания они предлагают два типа операций: преобразования, порождающие новые потоки DStream, и операции вывода, записывающие данные во внешние системы. Потоки DStream поддерживают большинство операций из тех, что доступны для наборов RDD, плюс новые операции, связанные со временем, такие как определение скользящего окна.

В отличие от программ пакетной обработки, приложения на основе Spark Streaming нуждаются в дополнительной настройке, чтобы работать 24 часа в сутки, семь дней в неделю. Мы обсудим механизм копирования данных в контрольных точках (checkpointing), предусмотренный как раз для достижения этой цели и позволяющий Spark Streaming сохранять данные в надежной файловой системе, такой как HDFS. Мы также расскажем, как перезапускать приложения в случаях аварийного их завершения и как настроить автоматический перезапуск.

Наконец, в версии Spark 1.1 модуль Spark Streaming был доступен лишь вjava и Scala. Экспериментальная поддержка Python была добавлена в версии Spark 1.2, но она пока способна работать только с текстовыми данными. Поэтому в этой главе мы будем демонстрировать примеры использования Spark Streaming API лишь на Java и Scala, но те же концепции применимы и в Python.

Машинное обучение с MLlib

MLlib – это библиотека функций машинного обучения (machine learning), входящая в состав Spark. Предназначенная для использования в кластерах, библиотека ML!ib содержит реализации разных алгоритмов машинного обучения и может использоваться во всех языках программирования, поддерживаемых фреймворком Spark. Мы покажем вам, как пользоваться этой библиотекой в своих программах, и дадим некоторые рекомендации по ее применению.

Сама по себе тема машинного обучения настолько обширна, что достойна даже не отдельной книги, а множества книг, поэтому, к большому сожалению, в этой главе у нас будет не так много места, чтобы подробно рассказать о технологии машинного обучения. Если вы не новичок в машинном обучении, в этой главе вы узнаете, как применять его в среде Spark; и даже те, кто прежде даже не слышал об этой технологии, смогут соединить знания, полученные здесь, с любым другим вводным материалом. Эта глава в большей степени
адресована исследователям данных, имеющим опыт использования технологии машинного обучения и ищущим возможность применять их совместно с фреймворком Spark, а также программистам, работающим со специалистами в области машинного обучения.

Основы машинного обучения

Чтобы помочь вам понять назначение функций в библиотеке MLlib, мы сначала дадим краткий обзор понятий машинного обучения.

Цель алгоритмов машинного обучения – попытаться на основе обучающей выборки (training data) выдать прогноз или решение, часто путем максимизации математической цели, о том, как должен вести себя алгоритм. Существуют разные типы задач обучения, включая классификацию, регрессию или кластеризацию, имеющие разные цели. Как простой пример мы рассмотрим задачу классификации, целью которой является определение принадлежности элемента к той или иной категории (например, является электронное письмо
спамом или нет) на основе маркированных экземпляров подобных элементов (например, электронных писем, о которых точно известно, являются они спамом или нет).

Все алгоритмы машинного обучения требуют определить для каждого элемента набор характеристических признаков (features), который будет передаваться функции обучения. Например, для электронного письма характеристическими признаками могут быть: сервер исходящей почты, число упоминаний слова «бесплатно» или цвет текста. Во многих случаях определение правильных характеристических признаков является самой сложной частью машинного обучения. Например, простое добавление в задачу, подбирающую рекомендации по выбору товаров, еще одного характеристического признака (например, в задачу, рекомендующую выбор книг, можно было бы добавить такой признак, как просматриваемые пользователем фильмы) может значительно улучшить результаты.

Большинство алгоритмов поддерживают только числовые характеристические признаки (например, векторы чисел, представляющих значения признаков), поэтому часто важным шагом являются извлечение и преобразование признаков для получения таких векторов. Например, для случая с классификацией текста (спам или неспам) есть несколько методов определения характеристик текста, таких как подсчет частоты встречаемости каждого слова.

После преобразования исходных данных в векторы признаков большинство алгоритмов обучения на их основе пытаются найти оптимум известной математической функции. Например, один из алгоритмов классификации может пытаться определить плоскость (в пространстве векторов признаков), которая «лучше» всего отделяет примеры спама от примеров неспама в соответствии с определением понятия «лучше» (например: «большинство экземпляров классифицируется плоскостью правильно»). В завершение алгоритм
вернёт модель, представляющую результат обучения (например, полученную плоскость). Эта модель может применяться для классификации новых точек (например, можно посмотреть, по какую сторону от плоскости оказывается характеристический вектор нового электронного письма, чтобы решить, является оно спамом или нет). На
рисунке показан пример работы процесса обучения.

13 книг для аналитиков: об анализе и обработке данных, работе на языках R и Python Материал редакции

Конспект материала сайта для предпринимателей, маркетологов, программистов и аналитиков Coriers.

Книги об анализе и обработке данных

По мнению автора, при помощи данных аналитик должен давать компании представление о том, как увеличить чистую прибыль или валовый объём продаж. Но проблема в том, что данными можно манипулировать. Поэтому каждому аналитику стоит прочитать книгу «Голая статистика». Она напоминает известную «Как лгать при помощи статистики».

По словам автора, «Голая статистика» современнее и описывает более сложные статистические моменты. В ней говорится, что на специалисте лежит огромная ответственность за полученные данные, и он всегда должен помнить — его результаты могут случайно исказить факты.

В ней данные рассматриваются с позиции пользователей и аналитиков. Автор книги утверждает: исследования и опросы дают ложные данные, потому что люди скрывают правду. В интернете люди не скрываются, они ищут в Google идеи для свиданий и симптомы болезней, рассказывают интернету всё, что у них в голове. Знание этого помогает аналитикам создавать точные модели.

Автор статьи советует книгу «Как правильно подать данные». Она полезна тем, что подсказывает читателям не только, что делать, но и чего делать нельзя. Например, целая глава посвящена тому, как избежать перегруженных диаграмм и моделей.

Для знакомства с общим анализом данных и машинным обучением автор рекомендует книгу «Основы машинного обучения для предсказательной аналитики», её можно скачать бесплатно.

В ней говорится не столько об использовании языка, сколько об общих проблемах анализа. В ней нет конкретного кода SQL или Pandas, но это, утверждает автор, лучше для понимания анализа данных, чем ограничения, которые устанавливает тот или иной язык.

Книги о языке программирования R

Автор считает, что спор «R или Python» не имеет смысла, так как обычно работа определяет язык. Лучше иметь общее представление об анализе данных, чем загонять себя в рамки одного языка.

Тем не менее он включает в подборку несколько книг о языке R. Первая — классическая «Введение в статистическое обучение с примерами на языке R».

По словам автора, это одна из любимых книг многих аналитиков. Но для начинающих она может показаться перегруженной математическими терминами. Автор пишет, что если человек не знаком с математическим моделированием, он не сможет разобраться в этой книге.


Новичкам автор советует прочитать книгу «Язык R: анализ данных, статистика, составление графиков». В ней подробно рассматриваются линейная регрессия, графики и анализ временных рядов. Автор отмечает, что в книге содержится и другая информация, но без углубления в статистику и математику.

Помимо этих книг в статье упоминается «Практическое программирование на R: разработка функций и симуляций». Автор считает книгу не особо полезной, потому что аналитики редко разрабатывают симуляции, но для тех, кто занимается их разработкой, она будет хорошим подспорьем.

Мастер Йода рекомендует:  Как Amazon и Google советы по повышению продуктивности вашей команды

Книги о языке программирования Python

В подборке автор собрал книги о библиотеках Python, которые могут помочь в анализе данных и машинном обучении.

Упоминается библиотека Pandas, её можно изучить с помощью книги «Python и анализ данных».

Эта книга, по мнению автора, хороша тем, что не только даёт базовые знания о группировании данных и временных рядах, но и упражнения, которые помогут применить Pandas в реальности. В книге сказано, что она поможет разобраться в «манипуляции, преобразовании, чистке и обработке данных с помощью Python».

Автор также упоминает другую библиотеку, на которую стоит обратить внимание, — scikit-learn. Для работы с ней автор рекомендует книгу «Машинное обучение и Python. Практические решения для всего: от предварительной обработки данных до глубокого обучения».

TensorFlow

Для работы с этой библиотекой автор рекомендует прочитать книгу «Прикладное машинное обучение с помощью Scikit-Learn и TensorFlow. Концепции, инструменты и техники для создания интеллектуальных систем». В ней менее подробно описывается машинное обучение, но вторая половина книги посвящена нейросетям: свёрточным нейросетям, автокодировщикам, методу исключения и так далее.

Книги о больших данных

Аналитику, работающему в крупной компании, обычно не требуется знание таких инструментов обработки больших данных, как Kafka, Hadoop или Cassandra. Однако, утверждает автор, хотя бы знакомство с ними может принести пользу, особенно тем, кто работает в стартапах.

Автор обращает внимание на две книги, знакомящие с Hadoop. Первая — «Hadoop. Подробное руководство». Она касается всех вопросов, необходимых для создания кластера Hadoop, и подходит скорее тем, кто хочет ознакомиться с темой, чтобы поддержать разговор.

Книга хороша тем, что обращает внимание на принципы разработки и поиска компромиссных решений. По мнению автора, именно понимания этого недостаёт многим, кто хочет использовать Hadoop. Например, какие базы данных использовать: NoSQL или реляционные, надо ли нанимать отдельного сотрудника для управления Hadoop, на эти и другие вопросы отвечает книга.

Автор выражает надежду, что эта подборка поможет читателям стать аналитиками или улучшить навыки анализа данных, и приводит ещё несколько материалов для чтения и видео об анализе данных, SQL и Python для ознакомления:

Онлайн-учебники по Scala на русском языке

Оставляю здесь ссылки на них, может кому пригодится. Доступ свободный, материал подается вполне доступно.

Может быть, для кого-то — это баян, а кому-то и понадобится.

Upd: русскоязычная конференция по Scala — scala@conference.jabber.ru. Достаточно людное место, общаются с новичками дружелюбно.

Я, пожалуй, прикреплю, если никто не против.

Если найду еще что хорошего, добавлю. Ну и статью в Wiki неплохо бы создать (если руки дойдут).

Молодец. Продолжай в том же духе.

Какая ide для скалки наиболее удобна в linux?

перевод все такой-же кривой?(я где-то месяц назад ими уже делился, тогда жаловались на перевод)

Я читал без особых проблем. Единственно кое-где неверно отображаются русские символы (баг с кодировкой?).

IDEA (+ они поддержку play2 анонсировали, но только в коммерческой версии, вроде). Да и вообще IDEA, наверное, лучшая IDE. Eclipse с плагинами падуч, NB не смотрел.

Как раз вчера искал. Спасибо.

IntelliJ Idea (в бесплатной версии есть поддержка скалы).

Спасибо. Шикарно. Продолжай в том же духе! (пошел качать скалу)

На озоне в продаже книга Scala для нетерпеливых.

Я посчитал, что это тред, где коллекционируются ссылки на руководства по Scala на русском языке, или я что-то не так понял?

Извиняюсь, что не так выразился: не «уже», а «тоже».

Спасибо, что добавил ссылку.

Случайно наткнулся на ваши ссылки — большое спасибо!

Не за что. Отыщешь что, кидай сюда.

К сожалению, слишком сложный язык.

А зачем? Разве английский язык не является обязательным для изучения для любого программиста?

На озоне в продаже книга Scala для нетерпеливых.

Варез зачем сюда тащить?

Экий ты щепетильный! Если полтора линуксоида скачают эту книжку, то издательство не обеднеет.

А какой под нее эталонный цмэс и/или умеет ли она генрить бд из кода как граилз?

Бери любой джавовский. Можно как вариант взять еще SORM.

А с какой книги лучше всего начать обучение? Перевод не особо волнует, так что если его нет, то пофиг. Пока как раз к «SCALA для нетерпеливых» присматриваюсь.

Спасибо. А можно ещё пару слов почему эта книга лучше? Смущает название — всё-таки язык мультипарадигменный.

Лично мое мнение:

  • Имхо язык программирования учить смысла нет: языки и технологии очень быстро меняются, однако принципы как правило остаются. В этой книге скала используется в качестве иллюстративного языка. SICP — это же книга не про схему)
  • Правильный порядок изложения основ функционального подхода, а-ля функтор -> аппликативный функтор -> моноид -> монада.
  • Сильные авторы (привет, scalaz!) и как следствие очень качественный материал.

Это имеет смысл, но (пусть и не слишком глубоко) с некоторыми функциональными языками знаком. Интересен, в первую очередь, именно язык — в смысле его сильные стороны.

Впрочем, об «scala for impatient» отзывы тоже не очень хорошие попадаются.

Изучаем Spark. Молниеносный анализ данных

Автор: Захария М., Венделл П., Конвински Э., Карау Х.
Год: 2015
ISBN: 978-5-97060-323-9
Страниц: 304
Язык: Русский
Формат: PDF
Размер: 15 Мб

Объем обрабатываемых данных во всех областях человеческой деятельности продолжает расти быстрыми темпами. Существуют ли эффективные приемы работы с ним? В этой книге рассказывается об Apache Spark, открытой системе кластерных вычислений, которая позволяет быстро создавать высокопроизводительные программы анализа данных. С помощью Spark вы сможете манипулировать огромными объемами данных посредством простого API на Python, Java и Scala.
Написанная разработчиками Spark, эта книга поможет исследователям данных и программистам быстро включиться в работу. Она рассказывает, как организовать параллельное выполнение заданий всего несколькими строчками кода, и охватывает примеры от простых пакетных приложений до программ, осуществляющих обработку потоковых данных и использующих алгоритмы машинного обучения.
С помощью этой книги вы:

  • познакомитесь с особенностями Spark, такими как распределенные наборы данных, кэширование в памяти и интерактивные оболочки;
  • изучите мощные встроенные библиотеки Spark, включая Spark SQL, Spark Streaming и MLlib;
  • научитесь пользоваться единой парадигмой программирования вместо смеси инструментов, таких как Hive, Hadoop, Mahout и Storm;
  • узнаете, как развертывать интерактивные, пакетные и потоковые приложения;
  • исследуете возможности использования разных источников данных, включая HDFS, Hive, JSON и S3;
  • овладеете продвинутыми приемами программирования на основе Spark, такими как разделение данных на разделы и применение совместно используемых переменных.

Содержание
1 Введение в анализ данных с помощью Spark
2 Загрузка и настройка Spark
3 Программирование операций с RDD
4 Работа с парами ключ/значение
5 Загрузка и сохранение данных
6 Дополнительные возможности Spark
7 Выполнение в кластере
8 Настройка и отладка Spark
9 Spark SQL
10 Spark Streaming
11 Машинное обучение с MLlib

Введение в анализ данных с помощью Spark

Что такое Apache Spark?

Apache Spark – это универсальная и высокопроизводительная кластерная вычислительная платформа.

По производительности Spark превосходит популярные реализации модели MapReduce, попутно обеспечивая поддержку более широкого диапазона типов вычислений, включая интерактивные запросы и потоковую обработку (streaming processing). Скорость играет важную роль при обработке больших объемов данных, так как именно скорость позволяет работать в интерактивном режиме, не тратя минуты или часы на ожидание. Одно из важнейших достоинств Spark, обеспечивающих столь высокую скорость, – способность выполнять вычисления в памяти. Но даже при работе с дисковой памятью Spark выполняет операции намного эффективнее, чем известные механизмы MapReduce.

Фреймворк создавался с целью охватить как можно более широкий диапазон рабочих нагрузок, которые прежде требовали создания отдельных распределенных систем, включая приложения пакетной обработки, циклические алгоритмы, интерактивные запросы и потоковую обработку. Поддерживая все эти виды задач с помощью единого механизма, Spark упрощает и удешевляет объединение разных видов обработки, которые часто необходимо выполнять в едином конвейере обработки данных. Кроме того, он уменьшает бремя обслуживания, поддерживая отдельные инструменты.

Фреймворк Spark предлагает простой API на языках Python, Java, Scala и SQL и богатую коллекцию встроенных библиотек. Он также легко объединяется с другими инструментами обработки больших данных. В частности, Spark может выполняться под управлением кластеров Hadoop и использовать любые источники данных Hadoop, включая Cassandra.


Унифицированный стек

Проект Spark включает множество тесно связанных компонентов. Ядро фреймворка образует его «вычислительный механизм» (computational engine), отвечающий за планирование, распределение и мониторинг приложений, выполняющих множество вычислительных задач на множестве машин – вычислительном кластере. Быстрое и универсальное вычислительное ядро Spark приводит в действие разнообразные высокоуровневые компоненты, специализированные для решения разных задач, таких как выполнение запросов SQL или машинное обучение. Эти компоненты поддерживают тесную интеграцию друг с другом, давая возможность объединять их, подобно библиотекам в программном проекте.

Философия тесной интеграции имеет несколько преимуществ. Во-первых, все библиотеки и высокоуровневые компоненты стека извлекают определенные выгоды от улучшений в слоях более низкого уровня. Например, когда в ядро Spark вносятся какие-то оптимизации, библиотеки поддержки SQL и машинного обучения автоматически увеличивают производительность. Во-вторых, затраты на сопровождение стека минимальны, потому что вместо 5-10 независимых программных систем организации требуется поддерживать
только одну. Эти затраты включают развертывание, сопровождение, тестирование, поддержку и т. д. Это также означает, что при добавлении в стек Spark новых компонентов все организации, использующие Spark, немедленно получают возможность опробовать эти новые компоненты. Это уменьшает затраты на опробование новых видов анализа данных, избавляя организации от необходимости загружать, развертывать и изучать новые программные проекты.

Кто и с какой целью использует Spark?

Так как Spark относится к категории универсальных фреймворков поддержки вычислений в кластерах, он применяется для реализации широкого круга приложений. Во вступлении мы определили две группы читателей, на которых ориентирована наша книга: специалисты в области анализа данных и инженеры-программисты. Давайте теперь поближе познакомимся с обеими группами и с тем, как они используют Spark. Неудивительно, что специалисты в этих двух группах используют Spark по-разному, но мы можем примерно разбить случаи использования на две основные категории – исследование данных и обработка данных.

Загрузка и настройка Spark

Мы рассмотрим процесс загрузки и настройки Spark для работы в локальном режиме на единственном компьютере. Эта глава написана для всех, кто только приступает к изучению Spark, включая исследователей данных и инженеров.

Функциональные возможности Spark можно использовать в программах на Python,Java или Scala. Для успешного усвоения сведений из этой книги необязательно быть опытным программистом, но все же знание базового синтаксиса хотя бы одного из этих языков будет как нельзя кстати. Мы будем включать примеры на всех этих языках, где только возможно.

Сам фреймворк Spark написан на Scala и выполняется под управлением виртуальной машины Java (Java Virtual Machine, JVM). Чтобы запустить Spark на ноутбуке или в кластере, достаточно лишь установить Java версии 6 или выше. Если вы предпочитаете Python API, вам потребуется интерпретатор Python (версии 2.6 или выше). В настоящее время Spark не поддерживает Python 3.

Введение в командные оболочки Spark для Python и Scala

В состав дистрибутива Spark входят интерактивные командные оболочки (shell), позволяющие выполнять специализированные виды анализа. Командные оболочки Spark напоминают любые другие командные оболочки, такие как, например, командные оболочки R, Python и Scala или даже командные оболочки операционных систем, допустим Bash или «Командная строка,> в Windows.

Однако, в отличие от большинства других оболочек, позволяющих манипулировать данными на диске и в памяти единственного компьютера, оболочки Spark дают возможность оперировать данными, распределенными по нескольким компьютерам, при этом все сложности, связанные с распределенным доступом, берет на себя Spark.

Так как Spark может загружать данные в память на множестве рабочих узлов, многие распределенные вычисления, даже на массивах данных, занимающих терабайты, распределенных между десятками компьютеров, выполняются всего несколько секунд. Это делает командную оболочку Spark вполне пригодной для исследования данных в интерактивном режиме. Spark предоставляет оболочки для обоих языков, Python и Scala, которые с успехом могут использоваться в кластерах.

Spark SQL

Мы познакомим вас с компонентом Spark SQL, обеспечивающим интерфейс для работы со структурированными и полуструктурированными данными. Структурированными называют любые данные, имеющие схему, то есть известный набор полей для каждой записи. Когда имеются данные такого типа, Spark SQL не только упрощает загрузку подобных данных, но и делает ее более эффективной. В частности, Spark SQL обладает тремя важными особенностями:

  1. может загружать данные из разных источников (например, JSON, Hive и Parquet);
  2. позволяет запрашивать данные с использованием SQL внутри программ Spark и из внешних инструментов, взаимодействующих с компонентом Spark SQL через стандартные механизмы подключения к базам данных QDBC/ODBC). Примером таких инструментов может служить Tableau;
  3. при использовании внутри программ Spark Spark SQL обеспечивает разнообразный программный интерфейс между SQL и обычным кодом на Python/Java/Scala, включая возможность создания соединений наборов RDD и таблиц SQL, экспортирования функций в SQL и многое другое. Использование такой комбинации часто упрощает разработку заданий.

Для реализации всего этого богатства возможностей Spark SQL определяет специальный тип RDD с именем SchernaRDD. Класс SchernaRDD представляет набор RDD объектов Row, каждый из которых представляет отдельную запись. Тип SchernaRDD также часто называют схемой (то есть списком полей данных) записей. Несмотря на то что SchernaRDD выглядит как обычный набор RDD, внутренне он хранит данные более эффективным способом, используя для этого схему. Кроме того, наборы этого типа поддерживают ряд операций, недоступных в других наборах RDD, такие как выполнение запросов SQL. Наборы типа SchernaRDD можно создавать из внешних источников данных, из результатов запросов и из обычных наборов RDD.

Spark Streaming

Многие приложения получают дополнительное преимущество, если способны обрабатывать данные сразу после их прибытия. Например, приложение может следить за статистикой просмотра страницы в масштабе реального времени, проводить машинное обучение или автоматически определять аномалии. Spark Streaming – это модуль в составе Spark, предназначенный для создания таких приложений. Он дает возможность писать потоковые приложения (streaming applications) с использованием API, очень похожего на тот, что применяется в пакетных заданиях (batch jobs), а значит, и тех же навыков программирования.

Подобно тому, как весь фреймворк Spark построен на понятии наборов данных RDD, Spark Streaming предоставляет собственную абстракцию, которая называется DStreams, или Discretized Streams (дискретизированные потоки). DStream – это последовательность данных, прибывшая за некоторый интервал времени. Внутренне каждый поток DStream представлен последовательностью наборов RDD, прибывших за интервал времени (именно поэтому в названии используется слово «дискретизированный»). Потоки DStream могут создаваться на основе любых источников данных, таких как Flume, Kafka или HDFS. После создания они предлагают два типа операций: преобразования, порождающие новые потоки DStream, и операции вывода, записывающие данные во внешние системы. Потоки DStream поддерживают большинство операций из тех, что доступны для наборов RDD, плюс новые операции, связанные со временем, такие как определение скользящего окна.

В отличие от программ пакетной обработки, приложения на основе Spark Streaming нуждаются в дополнительной настройке, чтобы работать 24 часа в сутки, семь дней в неделю. Мы обсудим механизм копирования данных в контрольных точках (checkpointing), предусмотренный как раз для достижения этой цели и позволяющий Spark Streaming сохранять данные в надежной файловой системе, такой как HDFS. Мы также расскажем, как перезапускать приложения в случаях аварийного их завершения и как настроить автоматический перезапуск.

Наконец, в версии Spark 1.1 модуль Spark Streaming был доступен лишь вjava и Scala. Экспериментальная поддержка Python была добавлена в версии Spark 1.2, но она пока способна работать только с текстовыми данными. Поэтому в этой главе мы будем демонстрировать примеры использования Spark Streaming API лишь на Java и Scala, но те же концепции применимы и в Python.

Машинное обучение с MLlib

MLlib – это библиотека функций машинного обучения (machine learning), входящая в состав Spark. Предназначенная для использования в кластерах, библиотека ML!ib содержит реализации разных алгоритмов машинного обучения и может использоваться во всех языках программирования, поддерживаемых фреймворком Spark. Мы покажем вам, как пользоваться этой библиотекой в своих программах, и дадим некоторые рекомендации по ее применению.

Сама по себе тема машинного обучения настолько обширна, что достойна даже не отдельной книги, а множества книг, поэтому, к большому сожалению, в этой главе у нас будет не так много места, чтобы подробно рассказать о технологии машинного обучения. Если вы не новичок в машинном обучении, в этой главе вы узнаете, как применять его в среде Spark; и даже те, кто прежде даже не слышал об этой технологии, смогут соединить знания, полученные здесь, с любым другим вводным материалом. Эта глава в большей степени
адресована исследователям данных, имеющим опыт использования технологии машинного обучения и ищущим возможность применять их совместно с фреймворком Spark, а также программистам, работающим со специалистами в области машинного обучения.

Основы машинного обучения

Чтобы помочь вам понять назначение функций в библиотеке MLlib, мы сначала дадим краткий обзор понятий машинного обучения.

Цель алгоритмов машинного обучения – попытаться на основе обучающей выборки (training data) выдать прогноз или решение, часто путем максимизации математической цели, о том, как должен вести себя алгоритм. Существуют разные типы задач обучения, включая классификацию, регрессию или кластеризацию, имеющие разные цели. Как простой пример мы рассмотрим задачу классификации, целью которой является определение принадлежности элемента к той или иной категории (например, является электронное письмо
спамом или нет) на основе маркированных экземпляров подобных элементов (например, электронных писем, о которых точно известно, являются они спамом или нет).

Все алгоритмы машинного обучения требуют определить для каждого элемента набор характеристических признаков (features), который будет передаваться функции обучения. Например, для электронного письма характеристическими признаками могут быть: сервер исходящей почты, число упоминаний слова «бесплатно» или цвет текста. Во многих случаях определение правильных характеристических признаков является самой сложной частью машинного обучения. Например, простое добавление в задачу, подбирающую рекомендации по выбору товаров, еще одного характеристического признака (например, в задачу, рекомендующую выбор книг, можно было бы добавить такой признак, как просматриваемые пользователем фильмы) может значительно улучшить результаты.

Большинство алгоритмов поддерживают только числовые характеристические признаки (например, векторы чисел, представляющих значения признаков), поэтому часто важным шагом являются извлечение и преобразование признаков для получения таких векторов. Например, для случая с классификацией текста (спам или неспам) есть несколько методов определения характеристик текста, таких как подсчет частоты встречаемости каждого слова.

После преобразования исходных данных в векторы признаков большинство алгоритмов обучения на их основе пытаются найти оптимум известной математической функции. Например, один из алгоритмов классификации может пытаться определить плоскость (в пространстве векторов признаков), которая «лучше» всего отделяет примеры спама от примеров неспама в соответствии с определением понятия «лучше» (например: «большинство экземпляров классифицируется плоскостью правильно»). В завершение алгоритм
вернёт модель, представляющую результат обучения (например, полученную плоскость). Эта модель может применяться для классификации новых точек (например, можно посмотреть, по какую сторону от плоскости оказывается характеристический вектор нового электронного письма, чтобы решить, является оно спамом или нет). На
рисунке показан пример работы процесса обучения.

Мнения: почему Scala вдруг стала такой популярной?

Новым мировым трендом может стать функциональный язык Scala. Об этом говорит, например, Google Trends: последние пять лет Java теряет популярность, а Scala наоборот — набирает позиции. Ещё одним подтверждением может послужить видео о планах и трендах 2020 года от компании Lightbend.

В Беларуси движение функциональных программистов также набирает обороты: ежегодно проводится конференция f(by), возобновляются митапы сообществ Func BY и Scala Enthusiasts Belarus. Сейчас в Минске активно открываются Scala-вакансии, даже такие гиганты как Wargaming.net и EPAM Systems начали искать функциональщиков.

В чем секрет шума вокруг Scala-технологий? Мы решили пообщаться с компаниями, которые чаще всего набирают «скалистов» и узнать их позицию по вопросу.

Иван Сухинин, Sr. Director, mPOC and Innovation Engineering Kibo:

— Три с половиной года назад, начиная свое дело, я выбрал Scala. Тогда меня многие отговаривали, убеждали, что это нелогично и неперспективно. Я был, пожалуй, одним из первых в Беларуси, кто рискнул писать на Scala. И не прогадал. Мы с товарищем из Америки уже через некоторое время начали сотрудничать с Tesla Motors. Разработали для них мобильную кассу — программу на iPad со всей мерчендайзинговой продукцией их компании; работаем в их магазинах по всему миру — от Токио до Ванкувера. С того времени стали активно расширяться. Набрали команду, обучили скалистов, так как в нашей стране таких специалистов практически не было. В конце прошлого года вошли в состав большой компании Kibo.

Почему именно Scala? Изначально мы выбирали платформу под стартап. Выслушивали мнения других специалистов, смотрели, изучали и пришли к выводу, что .NET только для бабушек, а Ruby on Rails плохо масштабируется. Вариант с Java отпал сразу из-за своей, на мой взгляд, примитивности и скучности. Остались Scala и Python. Остановились на первом варианте по трём причинам.

Во-первых, на платформе JVM, поверх которой работает Scala, уже есть большое количество библиотек, подходящих для enterprise-мира. А поскольку мы ориентировались на интеграцию с большим количеством систем, то выбор JVM-мира был более логичным. Во-вторых, учитывали перспективу развития компании и необходимость набирать команду. С Java или .NET переучить на Scala очень просто, человек полноценно включается в работу уже через месяц-полтора. А программистов эти направлений в Беларуси очень много. В-третьих, на свежий и интересный язык классных людей найти проще, чем на скучный и устаревший. Как результат — получилось собрать просто невероятную команду.

Валерий Каменский, CEO, Klika Tech, LLC:

— Наша компания ориентируется на предоставление сервиса для клиента в области анализа и обработки данных. Когда мы стартовали, люди только говорили о Big Data, но никто не понимал, как делать. Поэтому для нас всегда было крайне важно следить за развитием технологий, чтобы предоставлять максимально эффективные для клиента варианты.

Функциональное программирование стало решением. Среди прочих функциональных языков наиболее приемлемым с точки зрения бизнеса для нас оказался Scala.

Два года назад мы стали официальными партнёрами компании Lightbend (тогда еще Typesafe). Для этого наши ребята прошли серию собеседований и подтвердили имеющиеся знания в компании. Мы выросли и сейчас партнёрство находится на том уровне, когда Lightbend советует наши услуги своим клиентам и партнёрам. Это привело к нам «больших» клиентов.

Например, одна из команд создает сервис для работы с интерактивным видео: пользователь может управлять тем, что происходит на экране, выбирать по какому сценарию пойдет сюжет. Используется плеер в различных сферах: обучение, медицина, производство, сфера услуг.

Стартуем проект по разработке зарядных устройств для электроавтомобилей: на системном уровне нужно решать вопросы перераспределения энергии между районами города в часы пик, а на пользовательском — вопросы систем оплаты, скидок и бонусов.

Прямо сейчас формируется команда для проекта в сфере «умный дом». Сначала ребята отправятся на полгода в Калифорнию, офис клиента, для передачи опыта, а затем вернутся, чтобы работать над продуктом в Минске.

По последним проектам видно, что мы двигаемся в сторону IoT, очередного тренда, не стоим на месте, постоянно ищем талантливых людей. Поэтому мы так же как Adform и Kibo начали готовить специалистов: провели внутренние курсы для своих сотрудников, теперь в конце апреля планируем внешние курсы. Мы стараемся развивать сообщество «функциональщиков» в Минске, поддерживаем митапы и конференции.

Владислав Михолап, Scala Lab Project Manager, Adform BY:

— Adform — продуктовая компания, и сделать шаг в сторону Scala было хорошо взвешенным и обдуманным решением. Мы активно занимаемся популяризацией Scala и обучением Scala-разработчиков.

Обучение в организованной нами Scala Laboratory #3 уже идет. Задача команды — сделать open source проект, который будет выложен на GitHub. Участникам мы предложили сделать три проекта на выбор. Один из них — лексический анализатор музыкальных текстов. Проанализировав статистическими методами более 200 тысяч песен, начинающие скалисты построят вероятностную графическую модель, выявят скрытые темы в песнях. С помощью разработанного анализатора можно будет определить тематическую окраску песен, а на основе любимых композиций пользователя система предложит ему схожие. Казалось бы, сложная научная работа, а не проект для изучения нового языка программирования, но в рамках курса наши специалисты покажут, насколько легко и эффективно, используя наиболее популярные фреймворки и библиотеки, решаются такие задачи на Scala.

Кроме организации ScalaLab, мы периодически проводим встречи в сообществе Scala Enthusiasts Belarus.

В Adform мы используем Scala, потому что этот язык хорошо подходит как для исследовательских задач, так и для реальных промышленных проектов. Мы анализируем более двух миллиардов пользователей по всему миру, для того, чтобы определить их интересы и предоставить им релевантный контент. Также мы предугадываем их поведение, основываясь на схожести с другими пользователями.

С помощью Scala можно быстро создать модель, проверить её работоспособность на стадии прототипа, быстро проверить, насколько хорошо она будет работать на реальных нагрузках, а потом, не переписывая, вывести её «в бой».

Этими преимуществами пользуется большое число компаний с мировым именем: Twitter, Airbnb, Netflix и другие. Каждая из них компаний часто выкладывает в общий доступ множество полезных технологий и библиотек, предлагая сообществу развивать их. За счёт этого Scala постепенно становится de facto стандартом для Big Data.

Adform использует Scala практически во всех своих продуктах в здоровом балансе с другими технологиями. Причина такого выбора довольно прозаична: многие разработчики с удовольствием готовы попробовать новый язык программирования, новые роли, а заложенные в Scala принципы позволяют достаточно легко писать элегантные, но при этом эффективные многопоточные приложения. Наши продукты очень быстро растут (>10 раз в год), а Scala хорошо себя показывает как раз при масштабировании под нагрузкой.

Главное преимущество Scala

Данных в мире становится всё больше и вопрос их обработки становится всё острее. Традиционные методы и парадигмы больше не дают эффективных решений, поэтому альтернативные технологии набирают большую популярность среди компаний и разработчиков.

Одним из таких решений в этой области стал язык Scala. У него есть преимущество — он объединяет в себе две отработанные временем концепции в программировании: OOП и функциональную, и позволяет запустить ваш код на принятой бизнес-миром JVM.

Восьмая версия Java подогревает аппетит разработчиков к функциональному программированию, но её «неготовность» к продакшн-проектам толкает попробовать новые подходы на ближайшем JVM-совместимом языке. Так всё больше джавистов переходят в Scala.

Samsung, Coursera, Intel, Airbnb и другие крупные компании являются активными контрибьютерами в Scala-мир, подтверждая тренд.

Добавить комментарий