Spark Streaming Tutorial - Sentimentanalys med Apache Spark

Denna Spark Streaming-blogg introducerar dig till Spark Streaming, dess funktioner och komponenter. Det inkluderar ett sentimentanalysprojekt med hjälp av Twitter.

Spark Streaming är en förlängning av kärnan Spark API som möjliggör skalbar, hög genomströmning, feltolerant strömbehandling av live dataströmmar. Spark Streaming kan användas för att strömma live data och bearbetning kan ske i realtid. Spark Streamings ständigt växande användarbas består av hushållsnamn som Uber, Netflix och Pinterest.

När det gäller realtidsdataanalys ger Spark Streaming en enda plattform för att få in data för snabb och live-bearbetning och bevisar din skicklighet i samma.Genom den här bloggen kommer jag att presentera dig för den här nya spännande domänen för Spark Streaming och vi kommer att gå igenom ett komplett användningsfall, Twitter-sentimentanalys använder Spark Streaming.





Följande är ämnen som kommer att behandlas i den här bloggen:

  1. Vad är Streaming?
  2. Varför Spark Streaming?
  3. Spark Streaming Översikt
  4. Spark Streaming-funktioner
  5. Spark Streaming Fundamentals
    5.1 Strömmande sammanhang
    5.2 DStream
    5.3 Cachning / uthållighet
    5.4 Ackumulatorer, sändningsvariabler och kontrollpunkter
  6. Use Case - Twitter Sentiment Analysis

Vad är Streaming?

Dataströmning är en teknik för överföring av data så att den kan behandlas som en stadig och kontinuerlig ström. Strömmande teknik blir allt viktigare med tillväxten av Internet.



What Is Streaming - Spark Streaming - EdurekaFigur: Vad är Streaming?

Varför Spark Streaming?

Vi kan använda Spark Streaming för att strömma realtidsdata från olika källor som Twitter, aktiemarknaden och geografiska system och utföra kraftfulla analyser för att hjälpa företag.

Figur: Varför Spark Streaming?



Spark Streaming Översikt

Spark Streaming används för att behandla realtidsströmningsdata. Det är ett användbart tillskott till Core Spark API. Spark Streaming möjliggör hög genomströmning och feltolerant strömbehandling av live dataströmmar.

modellvy controller i java

Figur: Strömmar i Spark Streaming

Den grundläggande strömmenheten är DStreamsom i grunden är en serie RDD: er för att bearbeta realtidsdata.

Spark Streaming-funktioner

  1. Skalning: Spark Streaming kan enkelt skalas till hundratals noder.
  2. Hastighet: Det är enfår låg latens.
  3. Feltolerans: Spark har förmågan att eåterhämta sig från fel.
  4. Integration: Spark integreras med batch- och realtidsbehandling.
  5. Affärsanalys: Spark Streaming är used för att spåra kundernas beteende som kan användas i affärsanalys.

Spark Streaming Workflow

Spark Streaming-arbetsflödet har fyra steg på hög nivå. Den första är att strömma data från olika källor. Dessa källor kan vara strömmande datakällor som Akka, Kafka, Flume, AWS eller Parquet för realtidsströmning. Den andra typen av källor inkluderar HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB och Cassandra för statisk / batch-streaming. När detta har hänt kan Spark användas för att utföra maskininlärning på data via MLlib API. Vidare används Spark SQL för att utföra ytterligare operationer på dessa data. Slutligen kan streaming-utdata lagras i olika datalagringssystem som HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS och lokalt filsystem.

Figur: Översikt över Spark Streaming

Spark Streaming Fundamentals

  1. Strömmande sammanhang
  2. DStream
  3. Cachning
  4. Ackumulatorer, sändningsvariabler och kontrollpunkter

Strömmande sammanhang

Strömmande sammanhang förbrukar en dataflöde i Spark. Den registrerar en Mata in DStream att producera en Mottagare objekt. Det är den viktigaste ingångspunkten för Spark-funktionalitet. Spark tillhandahåller ett antal standardimplementeringar av källor som Twitter, Akka Actor och ZeroMQ som är tillgängliga från sammanhanget.

Ett StreamingContext-objekt kan skapas från ett SparkContext-objekt. En SparkContext representerar anslutningen till ett Spark-kluster och kan användas för att skapa RDD: er, ackumulatorer och sändningsvariabler på det klustret.

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

DStream

Diskretiserad ström (DStream) är den grundläggande abstraktion som tillhandahålls av Spark Streaming. Det är en kontinuerlig dataström. Den tas emot från en datakälla eller en bearbetad dataström som genereras genom att transformera ingångsströmmen.

Figur: Extrahera ord från en inmatad DStream

Internt representeras en DStream av en kontinuerlig serie RDD: er och varje RDD innehåller data från ett visst intervall.

Ingång DStreams: Mata in DStreams är DStreams som representerar strömmen av indata som tas emot från streamingkällor.

Figur: Mottagaren skickar data till Input DStream där varje batch innehåller RDD

Varje ingång DStream är associerad med ett mottagarobjekt som tar emot data från en källa och lagrar den i Sparks minne för bearbetning.

Transformationer på DStreams:

Alla operationer som används på en DStream översätts till operationer på de underliggande RDD: erna. Transformationer gör att data från ingången DStream kan modifieras på liknande sätt som RDD. DStreams stöder många av de omvandlingar som finns på vanliga Spark RDD.

Figur: DStream-omvandlingar

Följande är några av de populära omvandlingarna på DStreams:

Karta( funk )Karta( funk ) returnerar en ny DStream genom att passera varje element i källan DStream genom en funktion funk.
flatMap ( funk )flatMap ( funk ) liknar karta ( funk ) men varje ingångsobjekt kan mappas till 0 eller fler utmatningsobjekt och returnerar en ny DStream genom att skicka varje källelement genom en funktion funk.
filtrera( funk )filtrera( funk ) returnerar en ny DStream genom att bara välja posterna för källan DStream där funk returnerar sant.
minska( funk )minska( funk ) returnerar en ny DStream av RDD-element med enbart element genom att aggregera elementen i varje RDD för källan DStream med hjälp av en funktion funk .
Grupp av( funk )Grupp av( funk ) returnerar den nya RDD som i grunden består av en nyckel och motsvarande lista över objekt i den gruppen.

Utdata DStreams:

Utdataåtgärder gör att DStreams data kan tryckas ut till externa system som databaser eller filsystem. Utdataoperationer utlöser det faktiska utförandet av alla DStream-omvandlingar.

Figur: Utdataoperationer på DStreams

Cachning

DStreams tillåta utvecklare att cache / kvarhålla strömens data i minnet. Detta är användbart om data i DStream kommer att beräknas flera gånger. Detta kan göras med hjälp av envisas() metod på en DStream.

Figur: Cachning i 2 noder

För ingångsströmmar som tar emot data över nätverket (som Kafka, Flume, Sockets, etc.),standard persistensnivån är inställd för att replikera data till två noder för feltolerans.

Ackumulatorer, sändningsvariabler och kontrollpunkter

Akkumulatorer: Ackumulatorer är variabler som bara läggs till genom en associerande och kommutativ operation. De används för att implementera räknare eller summor. Spårning av ackumulatorer i användargränssnittet kan vara användbart för att förstå framstegen i löpande steg. Spark stöder numeriska ackumulatorer. Vi kan skapa namngivna eller namnlösa ackumulatorer.

Sändningsvariabler: Sändningsvariabler tillåta programmeraren att hålla en skrivskyddad variabel cachad på varje maskin snarare än att skicka en kopia av den med uppgifter. De kan användas för att ge varje nod en kopia av ett stort inmatningsdataset på ett effektivt sätt. Spark försöker också distribuera sändningsvariabler med effektiva sändningsalgoritmer för att sänka kommunikationskostnaden.

Kontrollpunkter: Kontrollpunkter liknar kontrollpunkter i spel. De gör att den körs 24/7 och gör den motståndskraftig mot fel som inte är relaterade till applikationslogiken.


Figur:
Funktioner i kontrollpunkter

Use Case - Twitter Sentiment Analysis

Nu när vi har förstått kärnkoncepten i Spark Streaming, låt oss lösa ett verkligt problem med Spark Streaming.

Problemförklaring: Att utforma ett Twitter-sentimentanalyssystem där vi fyller känslor i realtid för krishantering, servicejustering och målmarknadsföring.

Tillämpningar av sentimentanalys:

  • Förutsäg framgången för en film
  • Förutse framgång för politisk kampanj
  • Bestäm om du ska investera i ett visst företag
  • Riktad reklam
  • Granska produkter och tjänster

Implementering av gnistströmning:

Hitta Pseudokoden nedan:

// Importera nödvändiga paket till Spark Program import org.apache.spark.streaming. {Sekunder, StreamingContext} importera org.apache.spark.SparkContext._ ... importera java.io.File object twitterSentiment {def main (args : Array [String]) {if (args.längd<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 =>Hämta text från Hashtags} // RDD-omvandling med sortBy och sedan kartfunktionstaggar.countByValue () .foreachRDD {rdd => val now = Få aktuell tid för varje Tweet rdd .sortBy (_._ 2) .mapp (x => (x, nu)) // Sparar vår produktion i ~ / twitter / katalog .saveAsTextFile (s '~ / twitter / $ nu')} // DStream-transformation med filter- och kartfunktioner val tweets = stream.filter {t => val taggar = t. Split On Spaces .filter (_. StartsWith ('#')). Konvertera till små bokstäver. Existerar {x => sant}} 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 () // Sparar vår utdata vid ~ / med filnamn som börjar twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Resultat:

Följande är resultaten som visas i Eclipse IDE när du kör Twitter Sentiment Streaming-programmet.

Figur: Sentimentanalysutgång i Eclipse IDE

Som vi kan se på skärmdumpen kategoriseras alla tweets i positiva, neutrala och negativa enligt känslan av tweets innehåll.

Utdata från Sentiments of the Tweets lagras i mappar och filer beroende på den tid de skapades. Denna utgång kan lagras i det lokala filsystemet eller HDFS efter behov. Utdatakatalogen ser ut så här:

Figur: Mata ut mappar i vår projektmapp 'twitter'

Här, i twitter-katalogen, kan vi hitta Twitter-användarnamnen tillsammans med tidsstämpeln för varje tweet som visas nedan:

Figur: Utdatafil som innehåller Twitter-användarnamn med tidsstämpel

Nu när vi har fått Twitter-användarnamn och tidsstämpel, låt oss titta på känslor och tweets som är lagrade i huvudkatalogen. Här följs varje tweet av känslorna. Denna känsla som lagras används vidare för att analysera en stor mängd insikter från företag.

Figur: Utdatafil som innehåller tweets med känslor

Tweaking Code:

Låt oss nu ändra vår kod lite för att få känslor för specifika hashtags (ämnen). För närvarande träder Donald Trump, USA: s president, över nyhetskanaler och sociala medier online. Låt oss titta på känslorna kopplade till nyckelordet ” Trumf '.

Figur: Utföra sentimentanalys på tweets med 'Trump' nyckelord

Framåt:

Som vi har sett från vår demonstration av sentimentanalys kan vi extrahera känslor av specifika ämnen precis som vi gjorde för 'Trump'. På samma sätt kan Sentiment Analytics användas för krishantering, servicejustering och målmarknadsföring av företag runt om i världen.

Företag som använder Spark Streaming för sentimentanalys har använt samma tillvägagångssätt för att uppnå följande:

hashmap vs hashtable i java
  1. Förbättra kundupplevelsen
  2. Få konkurrensfördel
  3. Få affärsinformation
  4. Återuppliva ett förlorande varumärke

Med detta har vi kommit till slutet av detta Spark Streaming Tutorial blogg. Nu måste du ha fått en god förståelse för vad Spark Streaming är. Användningsfallet för Twitter Sentiment Analysis ger dig det nödvändiga förtroendet att arbeta med framtida projekt du stöter på i Spark Streaming och Apache Spark. Övning är nyckeln till att behärska alla ämnen och jag hoppas att den här bloggen har skapat tillräckligt intresse för dig för att utforska vidare på Apache Spark.

Vi rekommenderar följande Spark Streaming YouTube-handledning från Edureka till att börja med:

Spark Streaming | Exempel på analys av Twitter-sentiment | Edureka

Denna videoserie på Spark Tutorial ger en fullständig bakgrund till komponenterna tillsammans med Real-Life-användningsfall som Twitter-sentimentanalys , NBA Game Prediction Analys , System för upptäckt av jordbävningar , Flygdataanalys och Rekommendationssystem för film . Vi har personligen utformat användningsfallet för att ge en allround expertis till alla som kör koden.

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi tidigast. Om du vill lära dig Spark och bygga en karriär inom Spark-området och bygga expertis för att utföra storskalig databehandling med RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​och Scala med Real Life-användningsfall, kolla in våra interaktiva, live uppkopplad här, som kommer med 24 * 7 support för att vägleda dig under hela din inlärningsperiod.