Vejledning i gnistestreaming - Sentimentanalyse ved hjælp af Apache Spark



Denne Spark Streaming-blog introducerer dig til Spark Streaming, dens funktioner og komponenter. Det inkluderer et Sentiment Analysis-projekt ved hjælp af Twitter.

Spark Streaming er en udvidelse af kernen Spark API, der muliggør skalerbar, høj kapacitet, fejltolerant strømbehandling af live datastrømme. Spark Streaming kan bruges til at streame live data, og behandling kan ske i realtid. Spark Streamings stadigt voksende brugerbase består af husstandsnavne som Uber, Netflix og Pinterest.

Når det kommer til Real Time Data Analytics, giver Spark Streaming en enkelt platform til at indtage data til hurtig og live behandling og beviser din dygtighed i det samme.Gennem denne blog vil jeg introducere dig til dette nye spændende domæne af Spark Streaming, og vi vil gennemgå en komplet brugssag, Twitter-sentimentanalyse ved hjælp af Spark Streaming.





Følgende er de emner, der vil blive dækket i denne blog:

  1. Hvad er streaming?
  2. Hvorfor gnister streaming?
  3. Spark Streaming Oversigt
  4. Funktioner for gniststreaming
  5. Grundlæggende om gniststreaming
    5.1 Streaming-kontekst
    5.2 DStream
    5.3 Caching / vedholdenhed
    5.4 Akkumulatorer, udsendelsesvariabler og kontrolpunkter
  6. Use Case - Twitter Sentiment Analysis

Hvad er streaming?

Datastreaming er en teknik til overførsel af data, så de kan behandles som en konstant og kontinuerlig strøm. Streamingsteknologier bliver stadig vigtigere med væksten på Internettet.



Hvad er streaming - Spark Streaming - EdurekaFigur: Hvad er streaming?

Hvorfor gnister streaming?

Vi kan bruge Spark Streaming til at streame realtidsdata fra forskellige kilder som Twitter, aktiemarked og geografiske systemer og udføre kraftfulde analyser for at hjælpe virksomheder.

Figur: Hvorfor gnister streaming?



Spark Streaming Oversigt

Spark Streaming bruges til behandling af realtids streamingdata. Det er en nyttig tilføjelse til kernen Spark API. Spark Streaming muliggør høj gennemstrømning og fejltolerant strømbehandling af live datastrømme.

Figur: Streams i Spark Streaming

Den grundlæggende stream-enhed er DStreamsom dybest set er en række RDD'er til behandling af realtidsdata.

Funktioner for gniststreaming

  1. Skalering: Spark Streaming kan let skaleres til hundredvis af noder.
  2. Hastighed: Det er enfår lav latenstid.
  3. Fejltolerance: Spark har evnen til at egendannes tilstrækkeligt efter fejl.
  4. Integration: Gnist integreres med batch- og realtidsbehandling.
  5. Forretningsanalyse: Spark Streaming er used for at spore kundernes adfærd, som kan bruges i forretningsanalyser.

Workflow for gniststreaming

Spark Streaming-workflow har fire trin på højt niveau. Den første er at streame data fra forskellige kilder. Disse kilder kan streame datakilder som Akka, Kafka, Flume, AWS eller Parquet til streaming i realtid. Den anden type kilder inkluderer HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB og Cassandra til statisk / batch-streaming. Når dette sker, kan Spark bruges til at udføre maskinlæring på dataene gennem sin MLlib API. Desuden bruges Spark SQL til at udføre yderligere operationer på disse data. Endelig kan streamingoutputtet lagres i forskellige datalagringssystemer som HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS og lokalt filsystem.

sorter en matrix c ++

Figur: Oversigt over gniststreaming

Grundlæggende om gniststreaming

  1. Streaming-kontekst
  2. DStream
  3. Caching
  4. Akkumulatorer, udsendelsesvariabler og kontrolpunkter

Streaming-kontekst

Streaming-kontekst bruger en strøm af data i Spark. Det registrerer en Indtast DStream at producere en Modtager objekt. Det er det vigtigste indgangssted for Spark-funktionalitet. Spark leverer et antal standardimplementeringer af kilder som Twitter, Akka Actor og ZeroMQ, der er tilgængelige fra konteksten.

Et StreamingContext-objekt kan oprettes fra et SparkContext-objekt. En SparkContext repræsenterer forbindelsen til en Spark-klynge og kan bruges til at oprette RDD'er, akkumulatorer og udsendelsesvariabler på den klynge.

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

DStream

Diskret stream (DStream) er den grundlæggende abstraktion, der leveres af Spark Streaming. Det er en kontinuerlig datastrøm. Den modtages fra en datakilde eller en behandlet datastrøm genereret ved at transformere inputstrømmen.

Figur: Uddrag ord fra en Input DStream

Internt er en DStream repræsenteret af en kontinuerlig række RDD'er, og hver RDD indeholder data fra et bestemt interval.

Input DStreams: Indtast DStreams er DStreams, der repræsenterer strømmen af ​​inputdata modtaget fra streamingkilder.

Figur: Modtageren sender data til Input DStream, hvor hver batch indeholder RDD'er

Hver DStream-indgang er knyttet til et modtagerobjekt, der modtager dataene fra en kilde og gemmer dem i Sparks hukommelse til behandling.

Transformationer på DStreams:

Enhver operation, der anvendes på en DStream, oversættes til operationer på de underliggende RDD'er. Transformationer gør det muligt at modificere dataene fra input DStream svarende til RDD'er. DStreams understøtter mange af de tilgængelige transformationer på normale Spark RDD'er.

Figur: DStream Transformations

Følgende er nogle af de populære transformationer på DStreams:

kort( func )kort( func ) returnerer en ny DStream ved at føre hvert element i kilden DStream gennem en funktion func.
flatMap ( func )flatMap ( func ) ligner kort ( func ) men hvert inputelement kan kortlægges til 0 eller flere outputelementer og returnerer en ny DStream ved at føre hvert kildeelement gennem en funktion func.
filter( func )filter( func ) returnerer en ny DStream ved kun at vælge poster for kilden DStream, hvorpå func returnerer sandt.
reducere( func )reducere( func ) returnerer en ny DStream af enkeltelement RDD'er ved at samle elementerne i hver RDD i kilden DStream ved hjælp af en funktion func .
gruppeBy ( func )gruppeBy ( func ) returnerer den nye RDD, som grundlæggende består af en nøgle og en tilsvarende liste over emner i den gruppe.

Output DStreams:

Outputoperationer gør det muligt for DStreams data at blive skubbet ud til eksterne systemer som databaser eller filsystemer. Outputoperationer udløser den faktiske udførelse af alle DStream-transformationer.

Figur: Outputoperationer på DStreams

Caching

DStreams tillad udviklere at cache / fastholde streamens data i hukommelsen. Dette er nyttigt, hvis dataene i DStream beregnes flere gange. Dette kan gøres ved hjælp af vedvarer () metode på en DStream.

Figur: Cache i 2 noder

For input-streams, der modtager data over netværket (såsom Kafka, Flume, Sockets osv.),standard persistensniveauet er indstillet til at replikere dataene til to noder for fejltolerance.

Akkumulatorer, udsendelsesvariabler og kontrolpunkter

Akkumulatorer: Akkumulatorer er variabler, der kun tilføjes gennem en associerende og kommutativ operation. De bruges til at implementere tællere eller summer. Sporing af akkumulatorer i brugergrænsefladen kan være nyttigt til forståelse af forløbet af kørende stadier. Spark understøtter indbygget numeriske akkumulatorer. Vi kan oprette navngivne eller unavngivne akkumulatorer.

Broadcast-variabler: Broadcast variabler tillad, at programmøren holder en skrivebeskyttet variabel cachelagret på hver maskine i stedet for at sende en kopi af den med opgaver. De kan bruges til at give hver node en kopi af et stort inputdatasæt på en effektiv måde. Spark forsøger også at distribuere udsendelsesvariabler ved hjælp af effektive udsendelsesalgoritmer for at reducere kommunikationsomkostningerne.

Kontrolpunkter: Kontrolpunkter svarer til kontrolpunkter i spil. De får det til at køre 24/7 og gør det modstandsdygtigt over for fejl, der ikke er relateret til applikationslogikken.


Figur:
Funktioner ved kontrolpunkter

Use Case - Twitter Sentiment Analysis

Nu hvor vi har forstået kernebegreberne i Spark Streaming, lad os løse et virkeligt problem ved hjælp af Spark Streaming.

Problemformulering: At designe et Twitter Sentiment Analysis System, hvor vi udfylder realtidssentimenter til krisestyring, servicejustering og målmarkedsføring.

Anvendelser af sentimentanalyse:

  • Forudsig succesen for en film
  • Forudsig politisk kampagnesucces
  • Beslut om du vil investere i en bestemt virksomhed
  • Målrettet reklame
  • Gennemgå produkter og tjenester

Implementering af gniststreaming:

Find Pseudo-koden nedenfor:

// Importer de nødvendige pakker til Spark Program 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.længde)<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 =>Hent tekst fra Hashtags} // RDD-transformation ved hjælp af sortBy og derefter kortfunktionstags.countByValue () .foreachRDD {rdd => val now = Få aktuel tid for hver Tweet rdd .sortBy (_._ 2). Kort (x => (x, nu)) // Lagring af vores output på ~ / twitter / katalog .saveAsTextFile (s '~ / twitter / $ nu')} // DStream-transformation ved hjælp af filter- og kortfunktioner val tweets = stream.filter {t => val tags = t. Split On Spaces .filter (_. StartsWith ('#')). Konverter til små bogstaver tags. Eksisterer {x => sand}} 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 () // Lagring af vores output ved ~ / med filnavne, der starter som twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Resultater:

Følgende er de resultater, der vises i Eclipse IDE, mens du kører programmet Twitter Sentiment Streaming.

Figur: Sentimentanalyseoutput i formørkelse IDE

Som vi kan se på skærmbilledet, er alle tweets kategoriseret i Positive, Neutral og Negative i henhold til følelsen af ​​tweets indhold.

Outputtet fra Tweets følelser gemmes i mapper og filer i henhold til det tidspunkt, de blev oprettet. Denne output kan gemmes på det lokale filsystem eller HDFS efter behov. Outputmappen ser sådan ud:

Figur: Output mapper inde i vores 'twitter' projektmappe

Her inde i twitter-biblioteket kan vi finde brugernavne på Twitter-brugerne sammen med tidsstemplet for hver tweet som vist nedenfor:

Figur: Outputfil, der indeholder Twitter-brugernavne med tidsstempel

Nu hvor vi har fået Twitter-brugernavne og tidsstempel, lad os se på de følelser og tweets, der er gemt i hovedmappen. Her følges hvert tweet af følelsesfølelsen. Denne følelse, der er gemt, bruges yderligere til at analysere en lang række indsigter fra virksomheder.

Figur: Outputfil, der indeholder tweets med følelser

Tilpasningskode:

Lad os nu ændre vores kode lidt for at få følelser for specifikke hashtags (emner). I øjeblikket trækker Donald Trump, præsidenten for De Forenede Stater, på tværs af nyhedskanaler og online sociale medier. Lad os se på de følelser, der er knyttet til nøgleordet ' Trump '.

Figur: Udførelse af sentimentanalyse på tweets med 'Trump' nøgleord

Bevæger sig fremad:

Som vi har set fra vores demonstration af sentimentanalyse, kan vi udtrække følelser af bestemte emner, ligesom vi gjorde for 'Trump'. Tilsvarende kan Sentiment Analytics bruges til krisestyring, servicejustering og målrettet markedsføring af virksomheder over hele verden.

Virksomheder, der bruger Spark Streaming til sentimentanalyse, har anvendt den samme tilgang for at opnå følgende:

  1. Forbedring af kundeoplevelsen
  2. Opnå konkurrencefordel
  3. Opnå Business Intelligence
  4. Genoplive et tabt brand

Med dette er vi kommet til slutningen af ​​dette Vejledning i gnistestreaming blog. Nu skal du have opnået en god forståelse af hvad Spark Streaming er. Anvendelsessituationen Twitter Sentiment Analysis giver dig den nødvendige tillid til at arbejde på fremtidige projekter, du støder på i Spark Streaming og Apache Spark. Øvelse er nøglen til at mestre ethvert emne, og jeg håber, at denne blog har skabt nok interesse for dig til at udforske videre på Apache Spark.

Vi anbefaler følgende Spark Streaming YouTube-vejledning fra Edureka til at begynde med:

Spark Streaming | Eksempel på Twitter-sentimentanalyse | Edureka

Denne videoserie på Spark Tutorial giver en komplet baggrund i komponenterne sammen med virkelige brugssager som f.eks Twitter-sentimentanalyse , NBA Game Prediction Analyse , System til registrering af jordskælv , Flight Data Analytics og Filmanbefalingssystemer . Vi har personligt designet brugssagerne for at give en alsidig ekspertise til alle, der kører koden.

Har du et spørgsmål til os? Nævn det i kommentarfeltet, så vi vender tilbage til dig tidligst. Hvis du ønsker at lære Spark og opbygge en karriere inden for Spark-domæne og opbygge ekspertise til at udføre databehandling i stor skala ved hjælp af RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​og Scala med Real Life-brugssager, skal du tjekke vores interaktive, live online her, der kommer med 24 * 7 support til at guide dig gennem hele din læringsperiode.