Учебное пособие по потоковой передаче Spark - анализ настроений с помощью Apache Spark



В этом блоге Spark Streaming вы познакомитесь со Spark Streaming, его функциями и компонентами. Он включает в себя проект анализа настроений с использованием Twitter.

Spark Streaming - это расширение основного API Spark, которое обеспечивает масштабируемую, высокопроизводительную и отказоустойчивую потоковую обработку потоков данных в реальном времени. Spark Streaming можно использовать для потоковой передачи данных в реальном времени, а обработка может происходить в реальном времени. Постоянно растущая база пользователей Spark Streaming состоит из таких известных людей, как Uber, Netflix и Pinterest.

def __init __ (сам):

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





В этом блоге будут рассмотрены следующие темы:

  1. Что такое потоковая передача?
  2. Почему именно Spark Streaming?
  3. Обзор потоковой передачи Spark
  4. Возможности потоковой передачи Spark
  5. Основы потоковой передачи Spark
    5.1 Контекст потоковой передачи
    5.2 DStream
    5,3 Кеширование / постоянство
    5,4 Аккумуляторы, широковещательные переменные и контрольные точки
  6. Пример использования - Анализ настроений в Twitter

Что такое потоковая передача?

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



Что такое потоковая передача - потоковая передача Spark - EdurekaРисунок: Что такое потоковая передача?

Почему именно Spark Streaming?

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

Рисунок: Почему именно Spark Streaming?



Обзор потоковой передачи Spark

Spark Streaming используется для обработки потоковых данных в реальном времени. Это полезное дополнение к основному Spark API. Spark Streaming обеспечивает высокопроизводительную и отказоустойчивую потоковую обработку потоков данных в реальном времени.

Рисунок: Потоки в Spark Streaming

Основная единица потока - DStreamкоторый по сути представляет собой серию RDD для обработки данных в реальном времени.

Возможности потоковой передачи Spark

  1. Масштабирование: Spark Streaming можно легко масштабировать до сотен узлов.
  2. Скорость: Этообеспечивает низкую задержку.
  3. Отказоустойчивость: Spark обладает способностьюбыстро восстанавливаться после сбоев.
  4. Интеграция: Spark интегрируется с пакетной обработкой и обработкой в ​​реальном времени.
  5. Бизнес-анализ: Spark Streaming - это тыsed для отслеживания поведения клиентов, которое можно использовать в бизнес-анализе.

Рабочий процесс потоковой передачи Spark

Рабочий процесс Spark Streaming состоит из четырех этапов высокого уровня. Первый - это потоковая передача данных из различных источников. Эти источники могут быть источниками потоковых данных, такими как Akka, Kafka, Flume, AWS или Parquet для потоковой передачи в реальном времени. Второй тип источников включает HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB и Cassandra для статической / пакетной потоковой передачи. Как только это произойдет, Spark можно будет использовать для машинного обучения данных через свой MLlib API. Кроме того, Spark SQL используется для выполнения дальнейших операций с этими данными. Наконец, потоковый вывод может быть сохранен в различных системах хранения данных, таких как HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS и в локальной файловой системе.

Рисунок: Обзор потоковой передачи Spark

Основы потоковой передачи Spark

  1. Контекст потоковой передачи
  2. DStream
  3. Кеширование
  4. Аккумуляторы, широковещательные переменные и контрольные точки

Контекст потоковой передачи

Контекст потоковой передачи потребляет поток данных в Spark. Он регистрирует Входной DStream произвести Получатель объект. Это основная точка входа для функциональности Spark. Spark предоставляет ряд стандартных реализаций таких источников, как Twitter, Akka Actor и ZeroMQ, которые доступны из контекста.

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

import org.apache.spark._ import org.apache.spark.streaming._ var ssc = new StreamingContext (sc, Seconds (1))

DStream

Дискретизированный поток (DStream) - это базовая абстракция, предоставляемая Spark Streaming. Это непрерывный поток данных. Он получен из источника данных или обработанного потока данных, созданного путем преобразования входного потока.

Рисунок: Извлечение слов из входного DStream

Внутренне DStream представлен непрерывной серией RDD, и каждый RDD содержит данные из определенного интервала.

Входные DStreams: Входные потоки DStreams являются потоками DStream, представляющими поток входных данных, полученных от источников потоковой передачи.

Рисунок: Получатель отправляет данные во входной поток DStream, где каждый пакет содержит RDD.

Каждый входной поток DStream связан с объектом Receiver, который получает данные от источника и сохраняет их в памяти Spark для обработки.

Преобразования в DStreams:

Любая операция, применяемая к DStream, преобразуется в операции с базовыми RDD. Преобразования позволяют изменять данные из входного DStream аналогично RDD. DStreams поддерживают многие преобразования, доступные в обычных RDD Spark.

Рисунок: Преобразования DStream

Ниже приведены некоторые из популярных преобразований в DStreams:

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

Выходные потоки DStreams:

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

Рисунок: Операции вывода на DStreams

Кеширование

DStreams позволяют разработчикам кэшировать / сохранять данные потока в памяти. Это полезно, если данные в DStream будут вычисляться несколько раз. Это можно сделать с помощью персистировать () в DStream.

Рисунок: Кэширование в 2 узла

Для входных потоков, которые получают данные по сети (например, Kafka, Flume, Sockets и т. Д.),уровень сохраняемости по умолчанию настроен на репликацию данных на два узла для обеспечения отказоустойчивости.

Аккумуляторы, широковещательные переменные и контрольные точки

Аккумуляторы: Аккумуляторы - переменные, которые добавляются только посредством ассоциативной и коммутативной операции. Они используются для реализации счетчиков или сумм. Отслеживание аккумуляторов в пользовательском интерфейсе может быть полезно для понимания хода выполнения этапов. Spark изначально поддерживает числовые аккумуляторы. Мы можем создавать именованные или безымянные аккумуляторы.

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

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


Рисунок:
Особенности контрольно-пропускных пунктов

Пример использования - Анализ настроений в Twitter

Теперь, когда мы поняли основные концепции Spark Streaming, давайте решим реальную проблему с помощью Spark Streaming.

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

Приложения анализа настроений:

  • Предсказать успех фильма
  • Прогнозировать успех политической кампании
  • Решите, стоит ли инвестировать в определенную компанию
  • Таргетированная реклама
  • Обзор продуктов и услуг

Реализация потоковой передачи Spark:

Найдите псевдокод ниже:

// Импортируем необходимые пакеты в программу Spark import org.apache.spark.streaming. {Seconds, StreamingContext} import org.apache.spark.SparkContext._ ... import java.io.File object twitterSentiment {def main (args : Array [String]) {if (args.length<4) { System.err.println('Usage: TwitterPopularTags ' + ' []') System.exit(1) } StreamingExamples.setStreamingLogLevels() //Passing our Twitter keys and tokens as arguments for authorization val Array(consumerKey, consumerSecret, accessToken, accessTokenSecret) = args.take(4) val filters = args.takeRight(args.length - 4) // Set the system properties so that Twitter4j library used by twitter stream // Use them to generate OAuth credentials System.setProperty('twitter4j.oauth.consumerKey', consumerKey) ... System.setProperty('twitter4j.oauth.accessTokenSecret', accessTokenSecret) val sparkConf = new SparkConf().setAppName('twitterSentiment').setMaster('local[2]') val ssc = new Streaming Context val stream = TwitterUtils.createStream(ssc, None, filters) //Input DStream transformation using flatMap val tags = stream.flatMap { status =>Получить текст из хэштегов} // преобразование RDD с помощью sortBy и затем сопоставить функцию tags.countByValue () .foreachRDD {rdd => val now = Получить текущее время каждого твита rdd .sortBy (_._ 2) .map (x => (x, now)) // Сохраняем наш вывод в ~ / twitter / directory .saveAsTextFile (s '~ / twitter / $ now')} // Преобразование DStream с использованием функций filter и map val tweets = stream.filter {t => val теги = t. Разделить по пробелам .filter (_. StartWith ('#')). Преобразование в теги нижнего регистра. Существует {x => true}} val data = tweets.map {status => val sentiment = SentimentAnalysisUtils.detectSentiment (status.getText) val tagss = status.getHashtagEntities.map (_. GetText.toLowerCase) (status.getText, sentiment.toString, tagss.toString ())} data.print () // Сохранение нашего вывода в ~ / с именами файлов, начинающимися как twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Результаты:

Ниже приведены результаты, которые отображаются в среде IDE Eclipse при запуске программы потоковой передачи настроений Twitter.

Рисунок: Вывод анализа настроений в Eclipse IDE

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

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

Рисунок: Папки вывода внутри нашей папки проекта twitter

Здесь, внутри каталога Twitter, мы можем найти имена пользователей Twitter вместе с отметкой времени для каждого твита, как показано ниже:

Рисунок: Выходной файл, содержащий имена пользователей Twitter с отметкой времени

Теперь, когда у нас есть имена пользователей Twitter и временная метка, давайте посмотрим на настроения и твиты, хранящиеся в основном каталоге. Здесь каждый твит сопровождается эмоциональной эмоцией. Это сохраненное мнение в дальнейшем используется компаниями для анализа огромного количества идей.

Рисунок: Выходной файл, содержащий твиты с настроениями

Код настройки:

Теперь давайте немного изменим наш код, чтобы получить представление о конкретных хэштегах (темах). В настоящее время Дональд Трамп, президент США, набирает обороты на новостных каналах и в социальных сетях. Давайте посмотрим на настроения, связанные с ключевым словом ' Трамп ‘.

Рисунок: Анализ настроений в твитах с использованием ключевого слова Trump

Двигаться вперед:

Как мы видели из демонстрации нашего анализа настроений, мы можем извлекать настроения по определенным темам так же, как мы это делали для «Трампа». Аналогичным образом, Sentiment Analytics может использоваться компаниями по всему миру для управления кризисными ситуациями, корректировки услуг и целевого маркетинга.

Компании, использующие Spark Streaming для анализа настроений, применили тот же подход для достижения следующих целей:

  1. Повышение качества обслуживания клиентов
  2. Получение конкурентного преимущества
  3. Получение бизнес-аналитики
  4. Оживление проигрывающего бренда

На этом мы подошли к концу этого Руководство по потоковой передаче Spark блог. К настоящему времени вы, должно быть, хорошо понимаете, что такое Spark Streaming. Пример использования Twitter Sentiment Analysis придаст вам уверенности в работе над любыми будущими проектами, с которыми вы столкнетесь в Spark Streaming и Apache Spark. Практика - ключ к овладению любым предметом, и я надеюсь, что этот блог вызвал у вас достаточно интереса для дальнейшего изучения Apache Spark.

Мы рекомендуем для начала следующий учебник по Spark Streaming YouTube от Edureka:

Spark Streaming | Пример анализа настроений в Twitter | Эдурека

В этой серии видео по Spark Tutorial вы найдете полную информацию о компонентах, а также примеры использования в реальной жизни, такие как Анализ настроений в Twitter , Анализ прогнозов игр NBA , Система обнаружения землетрясений , Аналитика полетных данных и Системы рекомендации фильмов . Мы лично разработали варианты использования, чтобы предоставить всестороннюю экспертизу любому, кто запускает код.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев, и мы свяжемся с вами в ближайшее время. Если вы хотите изучить Spark и построить карьеру в области Spark, а также накопить опыт для крупномасштабной обработки данных с использованием RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​и Scala с примерами использования в реальной жизни, ознакомьтесь с нашими интерактивными, живыми онлайн Вот, который поставляется с круглосуточной поддержкой, которая поможет вам на протяжении всего периода обучения.