Esercitazione sullo streaming di Spark - Analisi del sentiment con Apache Spark

Questo blog di Spark Streaming ti introdurrà a Spark Streaming, alle sue funzionalità e componenti. Include un progetto di analisi del sentimento utilizzando Twitter.

Spark Streaming è un'estensione dell'API Spark principale che consente l'elaborazione del flusso scalabile, a velocità effettiva elevata e tollerante agli errori di flussi di dati in tempo reale. Spark Streaming può essere utilizzato per trasmettere dati in tempo reale e l'elaborazione può avvenire in tempo reale. La base di utenti in continua crescita di Spark Streaming è composta da nomi familiari come Uber, Netflix e Pinterest.

Quando si tratta di analisi dei dati in tempo reale, Spark Streaming fornisce un'unica piattaforma per acquisire dati per un'elaborazione rapida e in tempo reale e dimostra la tua abilità nello stesso.Attraverso questo blog, ti presenterò questo nuovo entusiasmante dominio di Spark Streaming e analizzeremo un caso d'uso completo, Twitter Sentiment Analysis utilizzando Spark Streaming.





I seguenti sono gli argomenti che verranno trattati in questo blog:

  1. Cos'è lo streaming?
  2. Perché Spark Streaming?
  3. Panoramica di Spark Streaming
  4. Funzionalità di Spark Streaming
  5. Nozioni fondamentali su Spark Streaming
    5.1 Contesto di streaming
    5.2 DStream
    5.3 Caching / Persistenza
    5.4 Accumulatori, variabili di trasmissione e punti di controllo
  6. Caso d'uso: analisi del sentiment di Twitter

Cos'è lo streaming?

Il flusso di dati è una tecnica per trasferire i dati in modo che possano essere elaborati come un flusso costante e continuo. Le tecnologie di streaming stanno diventando sempre più importanti con la crescita di Internet.



Che cosFigura: Cos'è lo streaming?

Perché Spark Streaming?

Possiamo utilizzare Spark Streaming per eseguire lo streaming di dati in tempo reale da varie fonti come Twitter, Borsa e Sistemi geografici ed eseguire potenti analisi per aiutare le aziende.

Figura: Perché Spark Streaming?



Panoramica di Spark Streaming

Spark Streaming viene utilizzato per elaborare i dati di streaming in tempo reale. È un'utile aggiunta all'API Spark principale. Spark Streaming consente l'elaborazione di flussi ad alta velocità e tolleranza agli errori di flussi di dati in tempo reale.

Figura: Flussi in Spark Streaming

come impostare il percorso per java

L'unità di flusso fondamentale è DStreamche è fondamentalmente una serie di RDD per elaborare i dati in tempo reale.

Funzionalità di Spark Streaming

  1. Ridimensionamento: Spark Streaming può facilmente scalare fino a centinaia di nodi.
  2. Velocità: È unsceglie una bassa latenza.
  3. Tolleranza ai guasti: Spark ha la capacità di erecuperare in modo efficiente dai guasti.
  4. Integrazione: Spark si integra con l'elaborazione batch e in tempo reale.
  5. Analisi aziendale: Spark Streaming sei tused per tenere traccia del comportamento dei clienti che può essere utilizzato nell'analisi aziendale.

Flusso di lavoro di Spark Streaming

Il flusso di lavoro di Spark Streaming ha quattro fasi di alto livello. Il primo è lo streaming di dati da varie fonti. Queste sorgenti possono essere sorgenti di dati in streaming come Akka, Kafka, Flume, AWS o Parquet per lo streaming in tempo reale. Il secondo tipo di sorgenti include HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB e Cassandra per lo streaming statico / batch. Una volta che ciò accade, Spark può essere utilizzato per eseguire Machine Learning sui dati tramite la sua API MLlib. Inoltre, Spark SQL viene utilizzato per eseguire ulteriori operazioni su questi dati. Infine, l'output di streaming può essere archiviato in vari sistemi di archiviazione dati come HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS e file system locale.

Figura: Panoramica di Spark Streaming

Nozioni fondamentali su Spark Streaming

  1. Contesto di streaming
  2. DStream
  3. Caching
  4. Accumulatori, variabili di trasmissione e punti di controllo

Contesto di streaming

Contesto di streaming consuma un flusso di dati in Spark. Registra un file Ingresso DStream per produrre un file Ricevitore oggetto. È il punto di ingresso principale per la funzionalità Spark. Spark fornisce una serie di implementazioni predefinite di fonti come Twitter, Akka Actor e ZeroMQ accessibili dal contesto.

Un oggetto StreamingContext può essere creato da un oggetto SparkContext. Un SparkContext rappresenta la connessione a un cluster Spark e può essere utilizzato per creare RDD, accumulatori e variabili di trasmissione su quel cluster.

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

DStream

Stream discreto (DStream) è l'astrazione di base fornita da Spark Streaming. È un flusso continuo di dati. Viene ricevuto da un'origine dati o da un flusso di dati elaborato generato trasformando il flusso di input.

Figura: Estrazione di parole da un input DStream

Internamente, un DStream è rappresentato da una serie continua di RDD e ogni RDD contiene dati da un certo intervallo.

Input DStream: Input DStream sono DStream che rappresentano il flusso di dati di input ricevuti da sorgenti di streaming.

Figura: Il ricevitore invia i dati al DStream di input dove ogni batch contiene RDD

Ogni DStream di input è associato a un oggetto Receiver che riceve i dati da una sorgente e li archivia nella memoria di Spark per l'elaborazione.

Trasformazioni su DStream:

Qualsiasi operazione applicata su un DStream si traduce in operazioni sugli RDD sottostanti. Le trasformazioni consentono di modificare i dati dall'ingresso DStream in modo simile agli RDD. DStream supporta molte delle trasformazioni disponibili sui normali RDD Spark.

Figura: Trasformazioni DStream

Di seguito sono riportate alcune delle trasformazioni popolari su DStream:

carta geografica( funz )carta geografica( funz ) restituisce un nuovo DStream passando ogni elemento del DStream di origine attraverso una funzione funz.
flatMap ( funz )flatMap ( funz ) è simile a map ( funz ) ma ogni elemento di input può essere mappato su 0 o più elementi di output e restituisce un nuovo DStream passando ogni elemento di origine attraverso una funzione funz.
filtro( funz )filtro( funz ) restituisce un nuovo DStream selezionando solo i record del DStream di origine su cui funz restituisce true.
ridurre( funz )ridurre( funz ) restituisce un nuovo DStream di RDD a elemento singolo aggregando gli elementi in ogni RDD del DStream di origine utilizzando una funzione funz .
raggruppa per( funz )raggruppa per( funz ) restituisce il nuovo RDD che fondamentalmente è composto da una chiave e dal corrispondente elenco di elementi di quel gruppo.

Uscita DStream:

Le operazioni di output consentono di inviare i dati di DStream a sistemi esterni come database o file system. Le operazioni di output attivano l'effettiva esecuzione di tutte le trasformazioni DStream.

Figura: Operazioni di output su DStream

Caching

programma per invertire un numero in java

DStreams consentire agli sviluppatori di memorizzare nella cache / rendere persistenti i dati del flusso in memoria. Ciò è utile se i dati nel DStream verranno calcolati più volte. Questo può essere fatto usando il persistere() metodo su un DStream.

Figura: Memorizzazione nella cache in 2 nodi

Per i flussi di input che ricevono dati sulla rete (come Kafka, Flume, Sockets, ecc.),il livello di persistenza predefinito è impostato per replicare i dati su due nodi per la tolleranza agli errori.

Accumulatori, variabili di trasmissione e punti di controllo

Accumulatori: Accumulatori sono variabili che vengono aggiunte solo tramite un'operazione associativa e commutativa. Sono usati per implementare contatori o somme. Il monitoraggio degli accumulatori nell'interfaccia utente può essere utile per comprendere l'avanzamento delle fasi di esecuzione. Spark supporta nativamente gli accumulatori numerici. Possiamo creare accumulatori con nome o senza nome.

Variabili di trasmissione: Variabili di trasmissione consentire al programmatore di mantenere una variabile di sola lettura nella cache su ogni macchina piuttosto che spedirne una copia con le attività. Possono essere utilizzati per fornire a ogni nodo una copia di un set di dati di input di grandi dimensioni in modo efficiente. Spark tenta inoltre di distribuire le variabili di trasmissione utilizzando algoritmi di trasmissione efficienti per ridurre i costi di comunicazione.

Checkpoint: Checkpoint sono simili ai checkpoint nei giochi. Lo fanno funzionare 24 ore su 24, 7 giorni su 7 e lo rendono resiliente a errori non correlati alla logica dell'applicazione.


Figura:
Caratteristiche dei checkpoint

Caso d'uso: analisi del sentiment di Twitter

Ora che abbiamo compreso i concetti fondamentali di Spark Streaming, risolviamo un problema della vita reale utilizzando Spark Streaming.

Dichiarazione problema: Progettare un sistema di analisi del sentiment di Twitter in cui popolare i sentimenti in tempo reale per la gestione delle crisi, l'adeguamento dei servizi e il marketing mirato.

Applicazioni della Sentiment Analysis:

  • Prevedi il successo di un film
  • Prevedi il successo della campagna politica
  • Decidi se investire in una determinata azienda
  • Pubblicità mirata
  • Rivedi prodotti e servizi

Implementazione di Spark Streaming:

Trova lo pseudo codice di seguito:

come usare goto c ++
// Importa i pacchetti necessari nel programma 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 =>Ottieni testo dagli hashtag} // Trasformazione RDD usando sortBy e poi mappa i tag di funzione.countByValue () .foreachRDD {rdd => val now = Ottieni l'ora corrente di ogni Tweet rdd .sortBy (_._ 2) .map (x => (x, now)) // Salvataggio del nostro output in ~ / twitter / directory .saveAsTextFile (s '~ / twitter / $ now')} // Trasformazione DStream utilizzando funzioni di filtro e mappa val tweets = stream.filter {t => tag val = t. Split On Spaces .filter (_. StartsWith ('#')). Converti in lettere minuscole 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 () // Salvataggio del nostro output in ~ / con nomi di file che iniziano come twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Risultati:

Di seguito sono riportati i risultati visualizzati nell'IDE Eclipse durante l'esecuzione del programma Twitter Sentiment Streaming.

Figura: Output di Sentiment Analysis nell'IDE Eclipse

Come possiamo vedere nello screenshot, tutti i tweet sono classificati in Positivo, Neutro e Negativo in base al sentiment dei contenuti dei tweet.

L'output dei Sentiments of the Tweets viene archiviato in cartelle e file in base al momento in cui sono stati creati. Questo output può essere archiviato nel file system locale o in HDFS, se necessario. La directory di output ha questo aspetto:

Figura: Cartelle di output all'interno della nostra cartella del progetto 'twitter'

Qui, all'interno della directory di Twitter, possiamo trovare i nomi utente degli utenti di Twitter insieme al timestamp per ogni tweet come mostrato di seguito:

Figura: File di output contenente i nomi utente di Twitter con timestamp

Ora che abbiamo i nomi utente e il timestamp di Twitter, esaminiamo i commenti ei tweet memorizzati nella directory principale. Qui, ogni tweet è seguito dall'emozione sentimentale. Questo sentimento che viene memorizzato viene ulteriormente utilizzato per analizzare una vasta moltitudine di intuizioni da parte delle aziende.

Figura: File di output contenente tweet con sentimenti

Codice di tweaking:

Ora, modifichiamo un po 'il nostro codice per ottenere opinioni per hashtag (argomenti) specifici. Attualmente, Donald Trump, il presidente degli Stati Uniti, è di tendenza sui canali di notizie e sui social media online. Esaminiamo le opinioni associate alla parola chiave ' briscola '.

Figura: Esecuzione dell'analisi del sentiment sui tweet con la parola chiave 'Trump'

Andare avanti:

Come abbiamo visto dalla nostra dimostrazione di Sentiment Analysis, possiamo estrarre i sentimenti di particolari argomenti proprio come abbiamo fatto per 'Trump'. Allo stesso modo, Sentiment Analytics può essere utilizzato nella gestione delle crisi, nell'adeguamento dei servizi e nel marketing mirato da aziende di tutto il mondo.

Le aziende che utilizzano Spark Streaming per Sentiment Analysis hanno applicato lo stesso approccio per ottenere quanto segue:

  1. Migliorare l'esperienza del cliente
  2. Ottenere un vantaggio competitivo
  3. Acquisizione di Business Intelligence
  4. Rivitalizzare un marchio in perdita

Con questo, siamo arrivati ​​alla fine di questo Spark Streaming Tutorial blog. A questo punto, devi aver acquisito una solida comprensione di cosa sia Spark Streaming. Il caso d'uso Twitter Sentiment Analysis ti darà la sicurezza necessaria per lavorare su qualsiasi progetto futuro che incontri in Spark Streaming e Apache Spark. La pratica è la chiave per padroneggiare qualsiasi argomento e spero che questo blog abbia creato abbastanza interesse per te da esplorare ulteriormente su Apache Spark.

Per iniziare, consigliamo il seguente tutorial di Spark Streaming YouTube da Edureka:

Spark Streaming | Esempio di analisi del sentiment di Twitter | Edureka

Questa serie di video su Spark Tutorial fornisce uno sfondo completo sui componenti insieme a casi d'uso nella vita reale come Twitter Sentiment Analysis , Analisi delle previsioni di gioco NBA , Sistema di rilevamento dei terremoti , Analisi dei dati di volo e Sistemi di raccomandazione dei film . Abbiamo progettato personalmente i casi d'uso in modo da fornire una competenza a tutto tondo a chiunque esegua il codice.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo al più presto. Se desideri imparare Spark e costruire una carriera nel dominio di Spark e sviluppare competenze per eseguire elaborazione dati su larga scala utilizzando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala con casi d'uso Real Life, dai un'occhiata al nostro interattivo, live in linea Qui, che viene fornito con supporto 24 * 7 per guidarti durante il tuo periodo di apprendimento.