Tutorial de transmisión por secuencias de Spark: análisis de opiniones con Apache Spark



Este blog de Spark Streaming le presentará Spark Streaming, sus características y componentes. Incluye un proyecto de análisis de sentimiento mediante Twitter.

Spark Streaming es una extensión de la API principal de Spark que permite el procesamiento de flujos escalable, de alto rendimiento y tolerante a fallas de flujos de datos en vivo. Spark Streaming se puede usar para transmitir datos en vivo y el procesamiento puede ocurrir en tiempo real. La base de usuarios cada vez mayor de Spark Streaming se compone de nombres conocidos como Uber, Netflix y Pinterest.

Cuando se trata de análisis de datos en tiempo real, Spark Streaming proporciona una plataforma única para ingerir datos para un procesamiento rápido y en vivo y demuestra tu habilidad en el mismo.A través de este blog, les presentaré este nuevo y emocionante dominio de Spark Streaming y repasaremos un caso de uso completo, Análisis de sentimiento de Twitter utilizando Spark Streaming.





Los siguientes son los temas que se tratarán en este blog:

c ++ ordenar una matriz
  1. ¿Qué es Streaming?
  2. ¿Por qué Spark Streaming?
  3. Descripción general de Spark Streaming
  4. Funciones de Spark Streaming
  5. Conceptos básicos de Spark Streaming
    5.1 Contexto de transmisión
    5.2 DStream
    5.3 Almacenamiento en caché / persistencia
    5.4 Acumuladores, variables de transmisión y puntos de control
  6. Caso de uso: análisis de opinión de Twitter

¿Qué es Streaming?

El flujo de datos es una técnica para transferir datos para que puedan procesarse como un flujo constante y continuo. Las tecnologías de transmisión son cada vez más importantes con el crecimiento de Internet.



Qué es Streaming - Spark Streaming - EdurekaFigura: ¿Qué es Streaming?

¿Por qué Spark Streaming?

Podemos usar Spark Streaming para transmitir datos en tiempo real de varias fuentes como Twitter, Bolsa de Valores y Sistemas Geográficos y realizar análisis poderosos para ayudar a las empresas.

Figura: ¿Por qué Spark Streaming?



Descripción general de Spark Streaming

Spark Streaming se utiliza para procesar datos de transmisión en tiempo real. Es una adición útil a la API principal de Spark. Spark Streaming permite el procesamiento de flujos de datos en vivo de alto rendimiento y tolerancia a fallas.

Figura: Secuencias en Spark Streaming

La unidad de flujo fundamental es DStreamque es básicamente una serie de RDD para procesar los datos en tiempo real.

Funciones de Spark Streaming

  1. Escalada: Spark Streaming puede escalar fácilmente a cientos de nodos.
  2. Velocidad: Es unlogra una baja latencia.
  3. Tolerancia a fallos: Spark tiene la capacidad de erecuperarse eficazmente de las fallas.
  4. Integración: Spark se integra con el procesamiento por lotes y en tiempo real.
  5. Análisis comercial: Spark Streaming eres túsed para rastrear el comportamiento de los clientes que se puede utilizar en el análisis comercial.

Flujo de trabajo de Spark Streaming

El flujo de trabajo de Spark Streaming tiene cuatro etapas de alto nivel. El primero es transmitir datos de varias fuentes. Estas fuentes pueden ser fuentes de datos de transmisión como Akka, Kafka, Flume, AWS o Parquet para transmisión en tiempo real. El segundo tipo de fuentes incluye HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB y Cassandra para transmisión estática / por lotes. Una vez que esto sucede, Spark se puede utilizar para realizar aprendizaje automático en los datos a través de su API MLlib. Además, Spark SQL se utiliza para realizar más operaciones con estos datos. Finalmente, la salida de transmisión se puede almacenar en varios sistemas de almacenamiento de datos como HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS y el sistema de archivos local.

Figura: Descripción general de Spark Streaming

Conceptos básicos de Spark Streaming

  1. Contexto de transmisión
  2. DStream
  3. Almacenamiento en caché
  4. Acumuladores, variables de transmisión y puntos de control

Contexto de transmisión

Contexto de transmisión consume un flujo de datos en Spark. Registra un Entrada DStream para producir un Receptor objeto. Es el principal punto de entrada para la funcionalidad Spark. Spark proporciona una serie de implementaciones predeterminadas de fuentes como Twitter, Akka Actor y ZeroMQ que son accesibles desde el contexto.

Se puede crear un objeto StreamingContext a partir de un objeto SparkContext. Un SparkContext representa la conexión a un clúster de Spark y se puede usar para crear RDD, acumuladores y variables de difusión en ese clúster.

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

DStream

Corriente discretizada (DStream) es la abstracción básica proporcionada por Spark Streaming. Es un flujo continuo de datos. Se recibe de una fuente de datos o un flujo de datos procesados ​​generado al transformar el flujo de entrada.

Figura: Extraer palabras de un DStream de entrada

Internamente, un DStream está representado por una serie continua de RDD y cada RDD contiene datos de un cierto intervalo.

Entrada DStreams: Entrada DStreams son DStreams que representan el flujo de datos de entrada recibidos de fuentes de transmisión.

Figura: El receptor envía datos al Input DStream donde cada lote contiene RDD

Cada entrada DStream está asociada con un objeto Receiver que recibe los datos de una fuente y los almacena en la memoria de Spark para su procesamiento.

Transformaciones en DStreams:

Cualquier operación aplicada en un DStream se traduce en operaciones en los RDD subyacentes. Las transformaciones permiten que los datos del DStream de entrada se modifiquen de manera similar a los RDD. DStreams admite muchas de las transformaciones disponibles en los RDD de Spark normales.

Figura: Transformaciones de DStream

Las siguientes son algunas de las transformaciones populares en DStreams:

mapa( func )mapa( func ) devuelve un nuevo DStream pasando cada elemento del DStream de origen a través de una función func.
mapa plano( func )mapa plano( func ) es similar al mapa ( func ) pero cada elemento de entrada se puede asignar a 0 o más elementos de salida y devuelve un nuevo DStream pasando cada elemento de origen a través de una función func.
filtrar( func )filtrar( func ) devuelve un nuevo DStream seleccionando solo los registros del DStream de origen en el que func devuelve verdadero.
reducir( func )reducir( func ) devuelve un nuevo DStream de RDD de un solo elemento agregando los elementos en cada RDD del DStream de origen utilizando una función func .
agrupar por( func )agrupar por( func ) devuelve el nuevo RDD que básicamente se compone de una clave y la lista correspondiente de elementos de ese grupo.

Salida DStreams:

Las operaciones de salida permiten que los datos de DStream se envíen a sistemas externos como bases de datos o sistemas de archivos. Las operaciones de salida desencadenan la ejecución real de todas las transformaciones de DStream.

Figura: Operaciones de salida en DStreams

Almacenamiento en caché

DStreams permitir a los desarrolladores almacenar en caché / conservar los datos de la transmisión en la memoria. Esto es útil si los datos en DStream se calcularán varias veces. Esto se puede hacer usando el persistir() método en un DStream.

Figura: Almacenamiento en caché en 2 nodos

Para flujos de entrada que reciben datos a través de la red (como Kafka, Flume, Sockets, etc.),el nivel de persistencia predeterminado está configurado para replicar los datos en dos nodos para tolerancia a fallas.

Acumuladores, variables de transmisión y puntos de control

cómo pasar por valor en java

Acumuladores: Acumuladores son variables que solo se agregan mediante una operación asociativa y conmutativa. Se utilizan para implementar contadores o sumas. Los acumuladores de seguimiento en la interfaz de usuario pueden ser útiles para comprender el progreso de las etapas en ejecución. Spark admite de forma nativa acumuladores numéricos. Podemos crear acumuladores con o sin nombre.

Variables de transmisión: Variables de difusión Permita que el programador mantenga una variable de solo lectura en caché en cada máquina en lugar de enviar una copia de ella con tareas. Se pueden utilizar para dar a cada nodo una copia de un gran conjunto de datos de entrada de manera eficiente. Spark también intenta distribuir variables de transmisión utilizando algoritmos de transmisión eficientes para reducir los costos de comunicación.

Puntos de control: Puntos de control son similares a los puntos de control en los juegos. Lo hacen funcionar las 24 horas del día, los 7 días de la semana y lo hacen resistente a fallas no relacionadas con la lógica de la aplicación.


Figura:
Características de los puestos de control

Caso de uso: análisis de opinión de Twitter

Ahora que hemos entendido los conceptos centrales de Spark Streaming, resolvamos un problema de la vida real usando Spark Streaming.

Planteamiento del problema: Diseñar un sistema de análisis de sentimientos de Twitter en el que incluyamos sentimientos en tiempo real para la gestión de crisis, el ajuste de servicios y el marketing objetivo.

Aplicaciones del análisis de sentimientos:

  • Predecir el éxito de una película
  • Predecir el éxito de la campaña política
  • Decidir si invertir en una determinada empresa
  • Publicidad dirigida
  • Revisar productos y servicios

Implementación de Spark Streaming:

Encuentre el pseudocódigo a continuación:

// Importar los paquetes necesarios al Programa 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 =>Get Text From The Hashtags} // Transformación RDD usando sortBy y luego mapear etiquetas de función.countByValue () .foreachRDD {rdd => val now = Obtener la hora actual de cada Tweet rdd .sortBy (_._ 2) .map (x => (x, ahora)) // Guardando nuestra salida en ~ / twitter / directory .saveAsTextFile (s '~ / twitter / $ now')} // Transformación DStream usando las funciones de filtro y mapa val tweets = stream.filter {t => val etiquetas = t. Dividir en espacios .filter (_. StartsWith ('#')). Convertir a minúsculas tags.exists {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 () // Guardando nuestra salida en ~ / con nombres de archivo que comienzan como twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Resultados:

Los siguientes son los resultados que se muestran en Eclipse IDE mientras se ejecuta el programa Twitter Sentiment Streaming.

Figura: Salida de análisis de sentimiento en Eclipse IDE

Como podemos ver en la captura de pantalla, todos los tweets están categorizados en Positivo, Neutral y Negativo según el sentimiento del contenido de los tweets.

La salida de los sentimientos de los tweets se almacena en carpetas y archivos según el momento en que se crearon. Esta salida se puede almacenar en el sistema de archivos local o HDFS según sea necesario. El directorio de salida se ve así:

Figura: Carpetas de salida dentro de nuestra carpeta de proyecto 'twitter'

Aquí, dentro del directorio de Twitter, podemos encontrar los nombres de usuario de los usuarios de Twitter junto con la marca de tiempo de cada tweet como se muestra a continuación:

Figura: Archivo de salida que contiene nombres de usuario de Twitter con marca de tiempo

Ahora que tenemos los nombres de usuario y la marca de tiempo de Twitter, echemos un vistazo a los sentimientos y tweets almacenados en el directorio principal. Aquí, cada tweet es seguido por la emoción del sentimiento. Este sentimiento que se almacena se utiliza además para analizar una gran multitud de conocimientos de las empresas.

Figura: Archivo de salida que contiene tweets con sentimientos

Modificar el código:

Ahora, modifiquemos un poco nuestro código para obtener opiniones sobre hashtags (temas) específicos. Actualmente, Donald Trump, el presidente de los Estados Unidos, es tendencia en los canales de noticias y las redes sociales en línea. Analicemos los sentimientos asociados con la palabra clave ' Triunfo ‘.

algoritmo ordenar c ++

Figura: Realización de análisis de opinión en tweets con la palabra clave 'Trump'

Seguir adelante:

Como hemos visto en nuestra demostración de Análisis de sentimientos, podemos extraer sentimientos de temas particulares tal como lo hicimos con 'Trump'. De manera similar, las empresas de todo el mundo pueden utilizar Sentiment Analytics en la gestión de crisis, ajuste de servicios y marketing de objetivos.

Las empresas que utilizan Spark Streaming para el análisis de sentimientos han aplicado el mismo enfoque para lograr lo siguiente:

  1. Mejorando la experiencia del cliente
  2. Obtener una ventaja competitiva
  3. Obtener inteligencia empresarial
  4. Revitalizando una marca perdedora

Con esto, hemos llegado al final de este Tutorial de Spark Streaming Blog. A estas alturas, debe haber adquirido un conocimiento sólido de lo que es Spark Streaming. El caso de uso de Twitter Sentiment Analysis le dará la confianza necesaria para trabajar en cualquier proyecto futuro que encuentre en Spark Streaming y Apache Spark. La práctica es la clave para dominar cualquier tema y espero que este blog haya creado suficiente interés en ti para explorar más a fondo Apache Spark.

Recomendamos el siguiente tutorial de Spark Streaming YouTube de Edureka para empezar:

Spark Streaming | Ejemplo de análisis de sentimiento de Twitter | Edureka

Esta serie de videos sobre el tutorial de Spark proporciona un trasfondo completo de los componentes junto con casos de uso de la vida real, como Análisis de sentimiento de Twitter , Análisis de predicción de partidos de la NBA , Sistema de detección de terremotos , Análisis de datos de vuelo y Sistemas de recomendación de películas . Hemos diseñado personalmente los casos de uso para proporcionar una experiencia completa a cualquiera que ejecute el código.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos comunicaremos con usted lo antes posible. Si desea aprender Spark y desarrollar una carrera en el dominio de Spark y adquirir experiencia para realizar el procesamiento de datos a gran escala utilizando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​y Scala con casos de uso de la vida real, consulte nuestros casos de uso interactivo en vivo en línea Aquí, que viene con soporte 24 * 7 para guiarlo durante su período de aprendizaje.