Привет, хабр!
В прошлый раз мы рассмотрели замечательный инструмент Vowpal Wabbit, который бывает полезен в случаях, когда приходится обучаться на выборках, не помещающихся в оперативную память. Напомним, что особенностью данного инструмента является то, что он позволяет строить в первую очередь линейные модели (которые, к слову, имеют хорошую обобщающую способность), а высокое качество алгоритмов достигается за счет отбора и генерации признаков, регуляризации и прочих дополнительных приемов. Сегодня рассмотрим инструмент, который более популярен и предназначен для обработки больших обьемов данных — Apache Spark.
Не будем вдаваться в подробности истории возникновения данного инструмента, а также его внутреннего устройства. Сосредоточимся на практических вещах. В этой статье мы рассмотрим базовые операции и основные вещи, которые можно делать в Spark'е, а в следующий раз рассмотрим подробнее библиотеку MlLib машинного обучения, а также GraphX для обработки графов (автор данного поста в основном для этого и использует данный инструмент — это как раз тот случай, когда зачастую граф необходимо держать в оперативной памяти на кластере, в то время как для машинного обучения очень часто достаточно Vowpal Wabbit'а). В этом мануале не будет много кода, т.к. рассматриваются основные понятия и философия Spark'а. В следующих статьях (про MlLib и GraphX) мы возьмем какой-нибудь датасет и подробнее рассмотрим Spark на практике.
Сразу скажем, что нативно Spark поддерживает Scala, Python и Java. Примеры будем рассматривать на Python, т.к. очень удобно работать непосредственно в IPython Notebook, выгружая небольшую часть данных из кластера и обрабатывая, например, пакетом Pandas — получается довольно удобная связка
Итак, начнем с того, что основным понятием в Spark'е является RDD (Resilient Distributed Dataset), который представляет собой Dataset, над которым можно делать преобразования двух типов (и, соответственно, вся работа с этими структурами заключается в последовательности этих двух действий).
Трансформации
Результатом применения данной операции к RDD является новый RDD. Как правило, это операции, которые каким-либо образом преобразовывают элементы данного датасета. Вот неполный самых распространенных преобразований, каждое из которых возвращает новый датасет (RDD):
.map(function) — применяет функцию function к каждому элементу датасета
.filter(function) — возвращает все элементы датасета, на которых функция function вернула истинное значение
.distinct([numTasks]) — возвращает датасет, который содержит уникальные элементы исходного датасета
Также стоит отметить об операциях над множествами, смысл которых понятен из названий:
.union(otherDataset)
.intersection(otherDataset)
.cartesian(otherDataset) — новый датасет содержит в себе всевозможные пары (A,B), где первый элемент принадлежит исходному датасету, а второй — датасету-аргументу
Действия
Действия применяются тогда, когда необходимо материализовать результат — как правило, сохранить данные на диск, либо вывести часть данных в консоль. Вот список самых распространенных действий, которые можно применять над RDD:
.saveAsTextFile(path) — сохраняет данные в текстовый файл (в hdfs, на локальную машину или в любую другую поддерживаемую файловую систему — полный список можно посмотреть в документации)
.collect() — возвращает элементы датасета в виде массива. Как правило, это применяется в случаях, когда данных в датасете уже мало (применены различные фильтры и преобразования) — и необходима визуализация, либо дополнительный анализ данных, например средствами пакета Pandas
.take(n) — возвращает в виде массива первые n элементов датасета
.count() — возвращает количество элементов в датасете
.reduce(function) — знакомая операция для тех, кто знаком с MapReduce. Из механизма этой операции следует, что функция function (которая принимает на вход 2 аргумента возвращает одно значение) должна быть обязательно коммутативной и ассоциативной
Это основы, которые необходимо знать при работе с инструментом. Теперь немного займемся практикой и покажем, как загружать данные в Spark и делать с ними простые вычисления
При запуске Spark, первое, что необходимо сделать — это создать SparkContext (если говорить простыми словами — это обьект, который отвечает за реализацию более низкоуровневых операций с кластером — подробнее — см. документацию), который при запуске Spark-Shell создается автоматически и доступен сразу (обьект sc)
Загрузка данных
Загружать данные в Spark можно двумя путями:
а). Непосредственно из локальной программы с помощью функции .parallelize(data)
localData = [5,7,1,12,10,25]
ourFirstRDD = sc.parallelize(localData)
б). Из поддерживаемых хранилищ (например, hdfs) с помощью функции .textFile(path)
ourSecondRDD = sc.textFile("path to some data on the cluster")
В этом пункте важно отметить одну особенность хранения данных в Spark'e и в тоже время самую полезную функцию .cache() (отчасти благодаря которой Spark стал так популярен), которая позволяет закэшировать данные в оперативной памяти (с учетом доступности последней). Это позволяет производить итеративные вычисления в оперативной памяти, тем самым избавившись от IO-overhead'а. Это особенно важно в контексте машинного обучения и вычислений на графах, т.к. большинство алгоритмов итеративные — начиная от градиентных методов, заканчивая такими алгоритмами, как PageRank
Работа с данными
После загрузки данных в RDD мы можем делать над ним различные трансформации и действия, о которых говорилось выше. Например:
Посмотрим первые несколько элементов:
for item in ourRDD.top(10):
print item
Либо сразу загрузим эти элементы в Pandas и будем работать с DataFrame'ом:
import pandas as pd
pd.DataFrame(ourRDD.map(lambda x: x.split(";")[:]).top(10))
Вообще, как видно, Spark настолько удобен, что дальше, наверное нет смысла писать различные примеры, а можно просто оставить это упражнение читателю — многие вычисления пишутся буквально в несколько строк
Напоследок, покажем лишь пример трансформации, а именно, вычислим максимальный и минимальный элементы нашего датасета. Как легко догадаться, сделать это можно, например, с помощью функции .reduce():
localData = [5,7,1,12,10,25]
ourRDD = sc.parallelize(localData)
print ourRDD.reduce(max)
print ourRDD.reduce(min)
Итак, мы рассмотрели основные понятия, необходимые для работы с инструментом. Мы не рассматривали работу с SQL, работу с парами <ключ, значение> (что делается легко — для этого достаточно сначала применить к RDD, например, фильтр, чтобы выделить, ключ, а дальше — уже легко пользоваться встроенными функциями, вроде sortByKey, countByKey, join и др.) — читателю предлагается ознакомиться с этим самостоятельно, а при возникновении вопросов — написать в комментарии. Как уже было отмечено, в следующий раз мы рассмотрим подробно библиотеку MlLib и отдельно — GraphX
Источник: http://habrahabr.ru/post/250811/
Другие новости по теме:
Новости по теме
Введение в Apache Spark17 февраля 2015 г., 21:04:37Привет, хабр! В прошлый раз мы рассмотрели замечательный инструмент Vowpal Wabbit, который бывает полезен в случаях, когда приходится обучаться на выборках, не помещающихся в оперативную память. Напомним, что особенностью данного инструмента является то, что он позволяет строить в первую очередь линейные... |
Кому МТС доверяет свою рекламу11 февраля 2015 г., 8:13:46Случилась со мной история. Зашёл я сутра (кофе ещё не пил) в web-интерфейс Gmail, а меня отредиректило на какую-то порнуху: Покровы буду сорваны во второй части, а пока… Я поразился. Посмотрел host gmail.com, вроде всё красиво. Посмотрел dig — тоже… Ну ладно, думаю, почту-то прочитать надо, отвечу... |
Инсталляция Bitrix Web Environment в облаке МегаФон10 февраля 2015 г., 19:53:15Мало кто знает, что Мегафон с недавнего времени вышел на рынок хостинга и предлагает такую услугу, как виртуальный сервер. На днях занимался развертыванием среды окружения Битрикс в их облаке, и обнаружил несколько интересных моментов. Кому интересно, дальше читаем под катом. Итак, создаем виртуальный... |
Устанавливаем и настраиваем LAMP и Trac+SVN на Ubuntu10 февраля 2015 г., 17:00:15Прочитав эту статью, я осознал, что Trac+SVN очень помогут в работе и решил настроить эту связку у себя на машине. С недавних пор я использую Убунту линукс, потому установка и настройка проходили с учетом особенностей данной системы. LAMP у меня уже был установлен ранее, так же как и inadyn. В итоге... |
Денвер-3 — официальная версия10 февраля 2015 г., 17:00:14В Денвере-3, в отличие от Денвера-2, по умолчанию используются Apache 2, PHP 5 и MySQL 5 и поддерживается SSL.Официальный сайтЗагрузить (5,4 МБ)Переход с Денвера-2 на Денвер-3... |
Yahoo стал «платиновым» спонсором проекта Apache10 февраля 2015 г., 17:00:12Вслед за Google и второй интернет-гигант, Yahoo, решил поддержать проект Apache Software Foundation, в рамках которого создается одноименный веб-сервер, который уже больше 11 лет держит звание самого популярного. Yahoo стал «платиновым» спонсором Apache, что означает финансирование в размере не менее... |
Сервер IIS догонит Apache в 2008 году?10 февраля 2015 г., 17:00:11Судя по нынешним темпам роста, веб-сервер Microsoft IIS может догнать свободный веб-сервер Apache где-то в конце 2008 года. Популярность некогда безусловного лидера Apache упала до девятилетнего минимума. Столь неприятный для многих факт вытекает из последней статистики Netcraft Web Server Survey о... |
Apache Autoindex — эксперименты10 февраля 2015 г., 17:00:11www.mocksoul.ru/pub/music/mixup/funk/ Вот таким вот можно сделать apache autoindex (mod_autoindex) :). Исструментарий: в свойствах IndexOptions: FancyIndexing VersionSort Charset=UTF-8 FoldersFirst HTMLTable XHTML NameWidth=70 -SuppressHTMLPreamble. Небольшой Header с яваскрипт-стайлингом. Ну и CSS2/3... |
На чём работает digg10 февраля 2015 г., 17:00:09Мы уже рассказывали, на чём работает MySpace и как устроены дата-центры Google, а теперь посмотрим на более мелкие проекты, такие как digg. Здесь нет ничего особо уникального и сделанного «по спецзаказу», как в первых двух случаях, но всё равно интересно. В момент запуска проект размещался на единственном... |
Microsoft IIS — самый вредоносный веб-сервер10 февраля 2015 г., 17:00:08Новое исследование команды Google Anti-Malware подтвердило предположение многих людей: сайты, хостящиеся на серверах Microsoft IIS в два раза чаще распространяют «злобное» ПО, нежели Apache. В прошлом месяце Google изучила около 70 тыс доменов, через которые распространялось различное вредоносное ПО.... |
Сервер Apache сильно сдал позиции10 февраля 2015 г., 17:00:07Давно не интересовался этим вопросом, а тут как раз подвернулся свежий Netcraft Web Server Survey. Согласно исследованию, доля Apache за последние год-полтора очень сильно снизилась. Тот же график демонстрирует рост популярности Майкрософтовской платформы, что, по-видимому, говорит о серьезно набирающих... |
Секреты оптимизатора10 февраля 2015 г., 17:00:05Поскольку я этим не занимаюсь, а лишь готовлю почву для их работы, пишу то, что некоторым известно, а многим интересно. 1) Заголовки Last-Modified и If-Modified-Since Для правильного индексирования поисковиками вашего сайта каждая страница должна выдавать заголовок Last-Modified и корректно обрабатывать... |
Интеграция со службами каталогов при разработке корпоративных порталов на платформе LAMP10 февраля 2015 г., 16:23:23Решаемая бизнес-задача / сфера применения Веб-разработчики с завидной регулярностью получают заказы на создание корпоративных порталов. Под порталами в данном случае понимаются внутренние сайты предприятий, предоставляющие информацию и сервисы для собственных сотрудников и наиболее близких партнёров. Подавляющее... |
Apache Maven 210 февраля 2015 г., 16:23:16Я таки решил попробовать что-нибудь написать в своем блоге, так что не ругайте сильно если что ;) Первую статью пишу про систему построения и управления Java-проектами Apache Maven 2. Это обзорная статья, если кому-то будет интересно – сделаю небольшой цикл уже с подробностями. Итак, что же такое Maven?... |
MAMP своими руками — собираем Apache под Mac OS X10 февраля 2015 г., 16:23:13Этот хабратопик будет из серии о том, как своими руками организовать MAMP (Mac OS X + Apache + MySQL + PHP). Начнем с обновления Apache 2. Думаю пользователям Mac OS X Leopard известно, что Apache (версии 2, начиная с 10.5.2) и так поставляется в комплекте с операционной системой. Но это совсем не... |
Инструкции по теме
Настройка Apache+PHP+MsSQL+Oracle на Mac OS X Leopard29 января 2015 г., 22:57:22В качестве десктопа у меня iMac с Leopard'ом. По умолчанию в комплекте с Леопардом идет апач и PHP с расширением для работы с MySQL. А разрабатываю я приложения, которые подключаются к базам данных MySQL, MsSQL и Oracle. Поэтому «родного» PHP мне не хватает. Помимо этого, мне необходим proxy_http_module... |
I am Groot. Делаем свою аналитику на событиях29 октября 2014 г., 16:13:31Весной этого года я узнал о возможности базы данных HP Vertica создавать запросы с матчингом паттернов событий. Так называемый Events Pattern Matching хорошо ложился под задачу анализировать поведение пользователей в продуктах ivi.ru. Мы решили попробовать разобраться с воронками оплаты, с поиском проблемных... |
Установка и настройка openchange под CentOS 6.528 июня 2014 г., 15:10:05В рунете да и в целом в интернете мало рассказывается о таком интересном продукте, как openchange. В теории openchange и его сопутствующие компоненты должны полностью заменять MS Exchange Server, на практике же это получается не совсем. Тех кто заинтересовался прошу в сам пост. Там будет рассказано о... |
Установка и интеграция solr с django под Ubuntu 12.0412 июня 2014 г., 15:11:04Введение Как известно, на многих сайтах/веб-приложениях необходимо тем или иным образом реализовать поиск. Все хотят быстрый и качественный поиск. Разработчики помимо всего прочего хотят, чтобы поисковик был прост в установке и использовании. Так как речь идет о django, то перед нами встает ряд ограничений... |
Автопровижининг Cisco SPA504g и Asterisk. Часть 2. Настройка DHCP-сервера и Apache1 марта 2014 г., 15:11:38В первой части мы установили MySQL и собрали Астериск из исходников с поддержкой res_config_mysql (Asterisk Realtime Architecture) Настройка DHCP-сервера У меня в двух рабочих средах развёрнуты разные DHCP-серверы, покажу настройки для трёх самых (имхо) популярных: Windows Server DHCP, Mikrotik, DNSMasq Windows... |
Netavis Observer — ПО IP-видеонаблюдения на базе Linux. Установка, настройка и небольшой взлом19 января 2014 г., 0:10:50Netavis Observer — программный продукт для организации видеонаблюдения с помощью IP-камер на базе Linux-сервера. Netavis Observer написан на Java, так же используются такие продукты как Apache Tomcat, Webmin, Munin, Mysql. Существует два варианта Netavis Observer — Bundled(поставляется в виде... |
[Перевод] Подробное руководство по разработке мобильных приложений AngularJS13 ноября 2013 г., 6:11:27Мобильные приложения, это не будущее разработки, это уже настоящее. В настоящее время пользователей мобильных приложений уже 1.2 млрд. человек, и это количество постоянно растет (Wikipedia). Вскоре количество мобильных устройств превзойдет количество людей на планете. Если скорость роста количества мобильных... |
[recovery mode] Google опубликовала исходный код Glass; платформа открыта для разработчиков30 апреля 2013 г., 18:06:06Компания Google опубликовала исходный код Google Glass. Напомню, что система базируется на Android 4.0.4 (а если быть точным, на этой версии базируется прототип, высланный в рамках Explorer Edition). Следует отметить, что опубликован не весь исходный код, т.к. часть его идет под лицензией GPL v2 (и,... |
[recovery mode] Офлайн-информер для онлайн-бизнеса26 декабря 2012 г., 16:57:12Наверное каждый кто кто развивает свой онлайн-бизнес постоянно отслеживает текущее положение дел, для этого вы собираете статистики, и выводите графики, но лично у меня всегда было ощущение виртуальности происходящего, кто-то зашел на сайт, зарегистрировался и даже совершил покупку. Всё это хорошо... |
Настройка Nginx + LAMP сервера в домашних условиях Часть 2: Настройка backend + MySQL26 ноября 2012 г., 0:47:30Здравствуйте. В предыдущей статье, мы познакомились с настройкой связки nginx + apache в режиме хостинга и репозиториями dotdeb. В этой статье мы познакомимся с настройкой backend: PHP, MySQL. В части PHP мы познакомимся со следующими темами: — общая настройка PHP — правильная настройка PHP + Postfix... |
Обзоры по теме
Обзор наиболее интересных материалов по анализу данных и машинному обучению №32 (19 — 25 января 2015)26 января 2015 г., 4:10:51Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. Общее Визуализация многомерных данных с помощью диаграмм Эндрюса Microsoft покупает компанию Revolution Analytics Лучшие презентации SlideShare по теме... |
Обзор наиболее интересных материалов по анализу данных и машинному обучению №26 (8 — 14 декабря 2014)15 декабря 2014 г., 8:06:17Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. Общее Яндекс открывает новое направление своей деятельности — Yandex Data Factory Как мы делали полярный график в DevExtreme Зарплата и инструменты... |
Обзор ноутбука MSI GE60 2PE Apache Pro28 ноября 2014 г., 14:58:18
Сейчас же перед нами ещё один 15-дюймовый игровой лэптоп от MSI GE60 2PE Apache Pro, что оказался красивее и уже, чем его «главные» предшественники: толщина ноутбука сейчас образовывает 37,6 мм, тогда как у «Доминатора» с 15-дюймовым экраном она достигала 58 мм. Крышка ноутбука так же, как и прежде сделана... |
Краткий обзор новых возможностей JPA-RS в EclipseLink18 октября 2014 г., 16:10:30EclipseLink — это ORM фрэймворк с открытым исходным кодом, разрабатываемый Eclipse Foundation. В конце года запланирован выход версии 2.6.0. проекта. В преддверии этого, я хочу ознакомить вас с некоторыми новыми возможностями службы JPA-RS, которая является частью EclipseLink. JPA-RS позволяет автоматически... |
Видео и обзор конференции OSSDEVCONF-201412 октября 2014 г., 8:07:47Пару недель назад в Калуге прошла конференция OSSDEVCONF-2014, или более солидно «Одиннадцатая конференция разработчиков свободных программ». Тематика в целом — «как внедрять СПО», «перспективы импортозамещения», «СПО во всех видах — от госпорталов до CAD-систем и Instant Messengerов», тонкости разработки... |
Обзор наиболее интересных материалов по анализу данных и машинному обучению №9 (11 — 18 августа 2014)19 августа 2014 г., 0:11:18Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. В данном выпуске достаточно много интересных видеоматериалов. Некоторые количество материалов посвящено теме Data Engineering. В данном выпуске достаточно много практических... |
Обзор 7 самых популярных кроссплатформенных мобильных фреймворков13 июля 2014 г., 0:11:06На работе меня попросили сделать сравнительную характеристику нескольких продуктов для создания кроссплатформенных мобильных приложений: Appcelerator Titanium, Kony Platform, Adobe PhoneGap, IBM Worklight, Telerik Platform, Verivo Akula, Xamarin. Потратил немало времени, поэтому решил, что лучше поделиться... |
Обзор Komodo Edit и Komodo IDE 89 июля 2014 г., 0:11:43Привет. На хабре много обзоров различных сред разработки, но совсем мало информации про Komodo Edit и Komodo IDE. Я пользуюсь Komodo с 2010 года и за это время вышло несколько мажорных релизов и хочу с вами поделиться кратким обзором основных возможностей. Komodo Edit — это кросс-платформенный текстовый... |
IE11 preview для Windows 7, обновления для modern.ie, 25% скидка на Parallels для Mac26 июля 2013 г., 12:06:31Сегодня вышла предварительная версия Internet Explorer 11 для Windows 7. Ранее он был доступен только пользователям Windows 8.1. Новый браузер обеспечит высокую производительность, большую скорость загрузки страниц, и поддержку последних стандартов,... |
Увидел свет Debian 7.0 "Wheezy". Обзор новшеств5 мая 2013 г., 7:06:17После более чем двух лет разработки увидел свет релиз Debian GNU/Linux 7.0 (Wheezy), доступный для 13 официально поддерживаемых архитектур, среди которых: Intel IA-32 (i386), 64-bit PC / Intel EM64T / x86-64 (amd64), Motorola/IBM PowerPC (powerpc), Sun/Oracle SPARC (sparc), MIPS (mips и mipsel), Intel... |
-
Ключевые слова:
- Big Data,
- Apache,
- Data Mining,
- Разработка,
- Python,
- Hadoop,
- Spark,
- Машинное обучение,
- информационные технологии,
- блог
