avatar habrahabr_full

Хабрахабр без ката



подробнее...

Следить за персональным блогом

Автоматизированная система Промышленная безопасность и охрана труда

Обновления главной ленты блогов
Вконтакте Facebook Twitter RSS Почта Livejournal
Внимание

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

17 февраля 2015, 21:04

Введение в Apache Spark


Привет, хабр!

image

В прошлый раз мы рассмотрели замечательный инструмент 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, над которым можно делать преобразования двух типов (и, соответственно, вся работа с этими структурами заключается в последовательности этих двух действий).
image

Трансформации


Результатом применения данной операции к 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/


Другие новости по теме:


Новости по теме

17 февраля 2015 г., 21:04:37

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

11 февраля 2015 г., 8:13:46

Случилась со мной история. Зашёл я сутра (кофе ещё не пил) в web-интерфейс Gmail, а меня отредиректило на какую-то порнуху: Покровы буду сорваны во второй части, а пока… Я поразился. Посмотрел host gmail.com, вроде всё красиво. Посмотрел dig — тоже… Ну ладно, думаю, почту-то прочитать надо, отвечу...

10 февраля 2015 г., 19:53:15

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

10 февраля 2015 г., 17:00:15

Прочитав эту статью, я осознал, что Trac+SVN очень помогут в работе и решил настроить эту связку у себя на машине. С недавних пор я использую Убунту линукс, потому установка и настройка проходили с учетом особенностей данной системы. LAMP у меня уже был установлен ранее, так же как и inadyn. В итоге...

10 февраля 2015 г., 17:00:14

В Денвере-3, в отличие от Денвера-2, по умолчанию используются Apache 2, PHP 5 и MySQL 5 и поддерживается SSL.Официальный сайтЗагрузить (5,4 МБ)Переход с Денвера-2 на Денвер-3...

10 февраля 2015 г., 17:00:12

Вслед за Google и второй интернет-гигант, Yahoo, решил поддержать проект Apache Software Foundation, в рамках которого создается одноименный веб-сервер, который уже больше 11 лет держит звание самого популярного. Yahoo стал «платиновым» спонсором Apache, что означает финансирование в размере не менее...

10 февраля 2015 г., 17:00:11

Судя по нынешним темпам роста, веб-сервер Microsoft IIS может догнать свободный веб-сервер Apache где-то в конце 2008 года. Популярность некогда безусловного лидера Apache упала до девятилетнего минимума. Столь неприятный для многих факт вытекает из последней статистики Netcraft Web Server Survey о...

10 февраля 2015 г., 17:00:11

www.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...

10 февраля 2015 г., 17:00:09

Мы уже рассказывали, на чём работает MySpace и как устроены дата-центры Google, а теперь посмотрим на более мелкие проекты, такие как digg. Здесь нет ничего особо уникального и сделанного «по спецзаказу», как в первых двух случаях, но всё равно интересно. В момент запуска проект размещался на единственном...

10 февраля 2015 г., 17:00:08

Новое исследование команды Google Anti-Malware подтвердило предположение многих людей: сайты, хостящиеся на серверах Microsoft IIS в два раза чаще распространяют «злобное» ПО, нежели Apache. В прошлом месяце Google изучила около 70 тыс доменов, через которые распространялось различное вредоносное ПО....

10 февраля 2015 г., 17:00:07

Давно не интересовался этим вопросом, а тут как раз подвернулся свежий Netcraft Web Server Survey. Согласно исследованию, доля Apache за последние год-полтора очень сильно снизилась. Тот же график демонстрирует рост популярности Майкрософтовской платформы, что, по-видимому, говорит о серьезно набирающих...

10 февраля 2015 г., 17:00:05

Поскольку я этим не занимаюсь, а лишь готовлю почву для их работы, пишу то, что некоторым известно, а многим интересно. 1) Заголовки Last-Modified и If-Modified-Since Для правильного индексирования поисковиками вашего сайта каждая страница должна выдавать заголовок Last-Modified и корректно обрабатывать...

10 февраля 2015 г., 16:23:23

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

10 февраля 2015 г., 16:23:16

Я таки решил попробовать что-нибудь написать в своем блоге, так что не ругайте сильно если что ;) Первую статью пишу про систему построения и управления Java-проектами Apache Maven 2. Это обзорная статья, если кому-то будет интересно – сделаю небольшой цикл уже с подробностями. Итак, что же такое Maven?...

10 февраля 2015 г., 16:23:13

Этот хабратопик будет из серии о том, как своими руками организовать MAMP (Mac OS X + Apache + MySQL + PHP). Начнем с обновления Apache 2. Думаю пользователям Mac OS X Leopard известно, что Apache (версии 2, начиная с 10.5.2) и так поставляется в комплекте с операционной системой. Но это совсем не...


Инструкции по теме

29 января 2015 г., 22:57:22

В качестве десктопа у меня iMac с Leopard'ом. По умолчанию в комплекте с Леопардом идет апач и PHP с расширением для работы с MySQL. А разрабатываю я приложения, которые подключаются к базам данных MySQL, MsSQL и Oracle. Поэтому «родного» PHP мне не хватает. Помимо этого, мне необходим proxy_http_module...

29 октября 2014 г., 16:13:31

Весной этого года я узнал о возможности базы данных HP Vertica создавать запросы с матчингом паттернов событий. Так называемый Events Pattern Matching хорошо ложился под задачу анализировать поведение пользователей в продуктах ivi.ru. Мы решили попробовать разобраться с воронками оплаты, с поиском проблемных...

28 июня 2014 г., 15:10:05

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

12 июня 2014 г., 15:11:04

Введение Как известно, на многих сайтах/веб-приложениях необходимо тем или иным образом реализовать поиск. Все хотят быстрый и качественный поиск. Разработчики помимо всего прочего хотят, чтобы поисковик был прост в установке и использовании. Так как речь идет о django, то перед нами встает ряд ограничений...

1 марта 2014 г., 15:11:38

В первой части мы установили MySQL и собрали Астериск из исходников с поддержкой res_config_mysql (Asterisk Realtime Architecture) Настройка DHCP-сервера У меня в двух рабочих средах развёрнуты разные DHCP-серверы, покажу настройки для трёх самых (имхо) популярных: Windows Server DHCP, Mikrotik, DNSMasq Windows...

19 января 2014 г., 0:10:50

Netavis Observer — программный продукт для организации видеонаблюдения с помощью IP-камер на базе Linux-сервера. Netavis Observer написан на Java, так же используются такие продукты как Apache Tomcat, Webmin, Munin, Mysql. Существует два варианта Netavis Observer — Bundled(поставляется в виде...

13 ноября 2013 г., 6:11:27

Мобильные приложения, это не будущее разработки, это уже настоящее. В настоящее время пользователей мобильных приложений уже 1.2 млрд. человек, и это количество постоянно растет (Wikipedia). Вскоре количество мобильных устройств превзойдет количество людей на планете. Если скорость роста количества мобильных...

30 апреля 2013 г., 18:06:06

Компания Google опубликовала исходный код Google Glass. Напомню, что система базируется на Android 4.0.4 (а если быть точным, на этой версии базируется прототип, высланный в рамках Explorer Edition). Следует отметить, что опубликован не весь исходный код, т.к. часть его идет под лицензией GPL v2 (и,...

26 декабря 2012 г., 16:57:12

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

26 ноября 2012 г., 0:47:30

Здравствуйте. В предыдущей статье, мы познакомились с настройкой связки nginx + apache в режиме хостинга и репозиториями dotdeb. В этой статье мы познакомимся с настройкой backend: PHP, MySQL. В части PHP мы познакомимся со следующими темами: — общая настройка PHP — правильная настройка PHP + Postfix...


Обзоры по теме

26 января 2015 г., 4:10:51

Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. Общее Визуализация многомерных данных с помощью диаграмм Эндрюса Microsoft покупает компанию Revolution Analytics Лучшие презентации SlideShare по теме...

15 декабря 2014 г., 8:06:17

Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. Общее Яндекс открывает новое направление своей деятельности — Yandex Data Factory Как мы делали полярный график в DevExtreme Зарплата и инструменты...

28 ноября 2014 г., 14:58:18 фото MSI GE60 2PE Apache Pro

Сейчас же перед нами ещё один 15-дюймовый игровой лэптоп от MSI GE60 2PE Apache Pro, что оказался красивее и уже, чем его «главные» предшественники: толщина ноутбука сейчас образовывает 37,6 мм, тогда как у «Доминатора» с 15-дюймовым экраном она достигала 58 мм. Крышка ноутбука так же, как и прежде сделана...

18 октября 2014 г., 16:10:30

EclipseLink — это ORM фрэймворк с открытым исходным кодом, разрабатываемый Eclipse Foundation. В конце года запланирован выход версии 2.6.0. проекта. В преддверии этого, я хочу ознакомить вас с некоторыми новыми возможностями службы JPA-RS, которая является частью EclipseLink. JPA-RS позволяет автоматически...

12 октября 2014 г., 8:07:47

Пару недель назад в Калуге прошла конференция OSSDEVCONF-2014, или более солидно «Одиннадцатая конференция разработчиков свободных программ». Тематика в целом — «как внедрять СПО», «перспективы импортозамещения», «СПО во всех видах — от госпорталов до CAD-систем и Instant Messengerов», тонкости разработки...

19 августа 2014 г., 0:11:18

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

13 июля 2014 г., 0:11:06

На работе меня попросили сделать сравнительную характеристику нескольких продуктов для создания кроссплатформенных мобильных приложений: Appcelerator Titanium, Kony Platform, Adobe PhoneGap, IBM Worklight, Telerik Platform, Verivo Akula, Xamarin. Потратил немало времени, поэтому решил, что лучше поделиться...

9 июля 2014 г., 0:11:43

Привет. На хабре много обзоров различных сред разработки, но совсем мало информации про Komodo Edit и Komodo IDE. Я пользуюсь Komodo с 2010 года и за это время вышло несколько мажорных релизов и хочу с вами поделиться кратким обзором основных возможностей. Komodo Edit — это кросс-платформенный текстовый...

26 июля 2013 г., 12:06:31

Сегодня вышла предварительная версия Internet Explorer 11 для Windows 7. Ранее он был доступен только пользователям Windows 8.1. Новый браузер обеспечит высокую производительность, большую скорость загрузки страниц, и поддержку последних стандартов,...

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...