Tutorial de streaming do Spark - Análise de sentimento usando Apache Spark



Este blog do Spark Streaming apresentará o Spark Streaming, seus recursos e componentes. Inclui um projeto de análise de sentimento usando o Twitter.

Spark Streaming é uma extensão do Spark API principal que permite o processamento escalonável, de alto rendimento e tolerante a falhas de fluxos de dados ao vivo. O Spark Streaming pode ser usado para transmitir dados ao vivo e o processamento pode acontecer em tempo real. A base de usuários cada vez maior do Spark Streaming consiste em nomes conhecidos como Uber, Netflix e Pinterest.

Quando se trata de análise de dados em tempo real, Spark Streaming fornece uma plataforma única para ingerir dados para processamento rápido e ao vivo e prova sua habilidade no mesmo.Por meio deste blog, vou apresentar a você este novo domínio do Spark Streaming e passaremos por um caso de uso completo, Análise de sentimento do Twitter usando Spark Streaming.





A seguir estão os tópicos que serão abordados neste blog:

  1. O que é streaming?
  2. Por que fazer streaming do Spark?
  3. Visão geral do Spark Streaming
  4. Recursos de streaming do Spark
  5. Princípios básicos do Spark Streaming
    5,1 Contexto de streaming
    5,2 DStream
    5,3 Cache / Persistência
    5,4 Acumuladores, variáveis ​​de transmissão e pontos de verificação
  6. Caso de uso - Análise de sentimento do Twitter

O que é streaming?

Fluxo de dados é uma técnica de transferência de dados para que possam ser processados ​​como um fluxo estável e contínuo. As tecnologias de streaming estão se tornando cada vez mais importantes com o crescimento da Internet.



O que é streaming - Spark Streaming - EdurekaFigura: O que é streaming?

o que .format faz em python

Por que fazer streaming do Spark?

Podemos usar o Spark Streaming para transmitir dados em tempo real de várias fontes, como Twitter, Bolsa de Valores e Sistemas Geográficos, e realizar análises poderosas para ajudar as empresas.

Figura: Por que fazer streaming do Spark?



Visão geral do Spark Streaming

Spark Streaming é usado para processar dados de streaming em tempo real. É uma adição útil à API do Spark principal. O Spark Streaming permite processamento de fluxo de dados ao vivo de alto rendimento e tolerante a falhas.

Figura: Streams no Spark Streaming

A unidade de fluxo fundamental é DStreamque é basicamente uma série de RDDs para processar os dados em tempo real.

Recursos de streaming do Spark

  1. Dimensionamento: O Spark Streaming pode escalar facilmente para centenas de nós.
  2. Rapidez: É umchieves baixa latência.
  3. Tolerância ao erro: Spark tem a capacidade de erecupere-se com eficiência de falhas.
  4. Integração: Spark se integra com processamento em lote e em tempo real.
  5. Análise de negócio: Spark Streaming é vocêsed para rastrear o comportamento dos clientes, que pode ser usado na análise de negócios.

Fluxo de trabalho de streaming do Spark

O fluxo de trabalho do Spark Streaming tem quatro estágios de alto nível. A primeira é transmitir dados de várias fontes. Essas fontes podem ser fontes de dados de streaming como Akka, Kafka, Flume, AWS ou Parquet para streaming em tempo real. O segundo tipo de fontes inclui HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB e Cassandra para streaming estático / em lote. Quando isso acontecer, o Spark pode ser usado para realizar o aprendizado de máquina nos dados por meio de sua API MLlib. Além disso, o Spark SQL é usado para realizar outras operações nesses dados. Finalmente, a saída de streaming pode ser armazenada em vários sistemas de armazenamento de dados como HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS e sistema de arquivos local.

Figura: Visão geral do Spark Streaming

Princípios básicos do Spark Streaming

  1. Contexto de streaming
  2. DStream
  3. Cache
  4. Acumuladores, variáveis ​​de transmissão e pontos de verificação

Contexto de streaming

Contexto de streaming consome um fluxo de dados no Spark. Registra um Input DStream para produzir um Receptor objeto. É o principal ponto de entrada para a funcionalidade do Spark. O Spark fornece várias implementações padrão de fontes como Twitter, Akka Actor e ZeroMQ que são acessíveis a partir do contexto.

Um objeto StreamingContext pode ser criado a partir de um objeto SparkContext. Um SparkContext representa a conexão com um cluster Spark e pode ser usado para criar RDDs, acumuladores e variáveis ​​de transmissão nesse cluster.

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

DStream

Fluxo Discretizado (DStream) é a abstração básica fornecida pelo Spark Streaming. É um fluxo contínuo de dados. Ele é recebido de uma fonte de dados ou um fluxo de dados processado gerado pela transformação do fluxo de entrada.

Figura: Extraindo palavras de um Input DStream

Internamente, um DStream é representado por uma série contínua de RDDs e cada RDD contém dados de um determinado intervalo.

Input DStreams: Input DStreams são DStreams que representam o fluxo de dados de entrada recebidos de fontes de streaming.

Figura: O receptor envia dados para o DStream de entrada, onde cada lote contém RDDs

Cada DStream de entrada está associado a um objeto Receptor que recebe os dados de uma fonte e os armazena na memória do Spark para processamento.

Transformações em DStreams:

Qualquer operação aplicada em um DStream se traduz em operações nos RDDs subjacentes. As transformações permitem que os dados do DStream de entrada sejam modificados de maneira semelhante aos RDDs. DStreams oferece suporte a muitas das transformações disponíveis em RDDs Spark normais.

Figura: Transformações DStream

A seguir estão algumas das transformações populares em DStreams:

mapa( função )mapa( função ) retorna um novo DStream passando cada elemento do DStream de origem por meio de uma função func.
flatMap ( função )flatMap ( função ) é semelhante ao mapa ( função ), mas cada item de entrada pode ser mapeado para 0 ou mais itens de saída e retorna um novo DStream passando cada elemento de origem por uma função func.
filtro( função )filtro( função ) retorna um novo DStream selecionando apenas os registros do DStream de origem no qual função retorna verdadeiro.
reduzir( função )reduzir( função ) retorna um novo DStream de RDDs de elemento único agregando os elementos em cada RDD do DStream de origem usando uma função função .
groupBy ( função )groupBy ( função ) retorna o novo RDD que basicamente é composto por uma chave e uma lista correspondente de itens desse grupo.

Saída DStreams:

As operações de saída permitem que os dados do DStream sejam enviados para sistemas externos, como bancos de dados ou sistemas de arquivos. As operações de saída acionam a execução real de todas as transformações DStream.

Figura: Operações de saída em DStreams

Cache

DStreams permitir que os desenvolvedores armazenem em cache / persistam os dados do stream na memória. Isso é útil se os dados no DStream forem calculados várias vezes. Isso pode ser feito usando o persistir() método em um DStream.

Figura: Cache em 2 nós

Para fluxos de entrada que recebem dados pela rede (como Kafka, Flume, Sockets, etc.),o nível de persistência padrão é definido para replicar os dados para dois nós para tolerância a falhas.

Acumuladores, variáveis ​​de transmissão e pontos de verificação

Acumuladores: Acumuladores são variáveis ​​que só são adicionadas por meio de uma operação associativa e comutativa. Eles são usados ​​para implementar contadores ou somas. O rastreamento de acumuladores na IU pode ser útil para entender o progresso dos estágios de execução. O Spark oferece suporte nativo a acumuladores numéricos. Podemos criar acumuladores nomeados ou não nomeados.

Variáveis ​​de transmissão: Variáveis ​​de transmissão permitir que o programador mantenha uma variável somente leitura em cache em cada máquina, em vez de enviar uma cópia dela com as tarefas. Eles podem ser usados ​​para fornecer a cada nó uma cópia de um grande conjunto de dados de entrada de maneira eficiente. O Spark também tenta distribuir variáveis ​​de transmissão usando algoritmos de transmissão eficientes para reduzir o custo de comunicação.

Pontos de verificação: Pontos de verificação são semelhantes aos pontos de verificação em jogos. Eles o fazem funcionar 24 horas por dia, 7 dias por semana e o tornam resiliente a falhas não relacionadas à lógica do aplicativo.


Figura:
Características dos pontos de verificação

Caso de uso - Análise de sentimento do Twitter

Agora que entendemos os principais conceitos do Spark Streaming, vamos resolver um problema da vida real usando o Spark Streaming.

Declaração do problema: Para projetar um sistema de análise de sentimento do Twitter, onde populamos sentimentos em tempo real para gerenciamento de crises, ajuste de serviço e marketing direcionado.

string é mutável ou imutável em java

Aplicações da análise de sentimento:

  • Preveja o sucesso de um filme
  • Preveja o sucesso da campanha política
  • Decida se deseja investir em uma determinada empresa
  • Publicidade direcionada
  • Avaliar produtos e serviços

Implementação do Spark Streaming:

Encontre o pseudo código abaixo:

// Importe os pacotes necessários para o 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 =>Obter texto das Hashtags} // transformação RDD usando sortBy e, em seguida, mapear a função tags.countByValue () .foreachRDD {rdd => val now = Obter a hora atual de cada Tweet rdd .sortBy (_._ 2) .map (x => (x, agora)) // Salvando nossa saída no diretório ~ / twitter / .saveAsTextFile (s '~ / twitter / $ now')} // Transformação DStream usando funções de filtro e mapa val tweets = stream.filter {t => val tags = t. Dividir no Spaces .filter (_. StartsWith ('#')). Converter em 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 () // Salvando nossa saída em ~ / com nomes de arquivos começando como twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Resultados:

A seguir estão os resultados que são exibidos no IDE Eclipse durante a execução do programa Twitter Sentiment Streaming.

Figura: Saída de análise de sentimento no IDE Eclipse

Como podemos ver na imagem, todos os tweets são categorizados em Positivo, Neutro e Negativo de acordo com o sentimento do conteúdo dos tweets.

A saída dos Sentimentos dos Tweets é armazenada em pastas e arquivos de acordo com a hora em que foram criados. Essa saída pode ser armazenada no sistema de arquivos local ou HDFS conforme necessário. O diretório de saída é semelhante a este:

Figura: Pastas de saída dentro de nossa pasta de projeto ‘twitter’

Aqui, dentro do diretório do Twitter, podemos encontrar os nomes de usuário dos usuários do Twitter junto com a data e hora de cada tweet, conforme mostrado abaixo:

Figura: Arquivo de saída contendo nomes de usuário do Twitter com carimbo de data / hora

Agora que temos os nomes de usuário e a data / hora do Twitter, vamos dar uma olhada nos sentimentos e tweets armazenados no diretório principal. Aqui, cada tweet é seguido pela emoção do sentimento. Esse sentimento armazenado é usado posteriormente para analisar uma vasta gama de insights das empresas.

Figura: Arquivo de saída contendo tweets com sentimentos

Código de ajuste:

Agora, vamos modificar nosso código um pouco para obter opiniões sobre hashtags (tópicos) específicos. Atualmente, Donald Trump, o presidente dos Estados Unidos, é uma tendência em canais de notícias e mídia social online. Vejamos os sentimentos associados à palavra-chave ‘ Trunfo ‘.

Figura: Executando análise de sentimento em tweets com a palavra-chave ‘Trump’

Avançar:

Como vimos em nossa demonstração de análise de sentimento, podemos extrair sentimentos de tópicos específicos, assim como fizemos para ‘Trump’. Da mesma forma, o Sentiment Analytics pode ser usado no gerenciamento de crises, ajuste de serviços e marketing direcionado por empresas em todo o mundo.

goto instrução c ++

As empresas que usam Spark Streaming para análise de sentimento aplicaram a mesma abordagem para alcançar o seguinte:

  1. Melhorar a experiência do cliente
  2. Ganhando vantagem competitiva
  3. Obtendo Business Intelligence
  4. Revitalizando uma marca perdida

Com isso, chegamos ao fim deste Tutorial do Spark Streaming blog. Até agora, você deve ter adquirido um bom entendimento do que é Spark Streaming. O caso de uso do Twitter Sentiment Analysis lhe dará a confiança necessária para trabalhar em qualquer projeto futuro que você encontrar no Spark Streaming e no Apache Spark. A prática é a chave para dominar qualquer assunto e espero que este blog tenha gerado interesse suficiente em você para explorar mais o Apache Spark.

Recomendamos o seguinte tutorial do Spark Streaming YouTube de Edureka para começar:

Spark Streaming | Exemplo de análise de sentimento do Twitter | Edureka

Esta série de vídeos sobre o tutorial do Spark fornece um histórico completo dos componentes, juntamente com casos de uso da vida real, como Análise de sentimento do Twitter , Análise de previsão de jogos da NBA , Sistema de detecção de terremotos , Flight Data Analytics e Sistemas de recomendação de filmes . Nós projetamos pessoalmente os casos de uso para fornecer uma experiência completa a qualquer pessoa que execute o código.

Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você o mais breve possível. Se você deseja aprender o Spark e construir uma carreira no domínio do Spark e desenvolver experiência para realizar processamento de dados em grande escala usando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala com casos de uso da vida real, confira nossos casos de uso interativo e ao vivo conectados Aqui, que vem com suporte 24 horas por dia, 7 dias por semana para guiá-lo durante o período de aprendizado.