Spark Streaming-zelfstudie - Sentimentanalyse met Apache Spark



Deze Spark Streaming-blog laat je kennismaken met Spark Streaming, de functies en componenten ervan. Het bevat een sentimentanalyseproject met behulp van Twitter.

Spark Streaming is een uitbreiding van de kern-API van Spark die schaalbare, fouttolerante stroomverwerking met hoge doorvoer van live datastromen mogelijk maakt. Spark Streaming kan worden gebruikt om live gegevens te streamen en de verwerking kan in realtime plaatsvinden. Het steeds groeiende gebruikersbestand van Spark Streaming bestaat uit bekende namen als Uber, Netflix en Pinterest.

Als het gaat om realtime gegevensanalyse, biedt Spark Streaming een enkel platform om gegevens op te nemen voor snelle en live verwerking en bewijst uw vaardigheid in hetzelfde.Via deze blog laat ik je kennismaken met dit nieuwe opwindende domein van Spark Streaming en zullen we een volledige use case doornemen, Twitter-sentimentanalyse met behulp van Spark Streaming.





De volgende zijn de onderwerpen die in deze blog zullen worden behandeld:

  1. Wat is streaming?
  2. Waarom Spark-streaming?
  3. Spark Streaming Overzicht
  4. Spark-streamingfuncties
  5. Spark Streaming Fundamentals
    5.1 Streamingcontext
    5.2 DStream
    5.3 Caching / persistentie
    5.4 Accumulatoren, uitgezonden variabelen en controlepunten
  6. Gebruiksvoorbeeld - Twitter-sentimentanalyse

Wat is streaming?

Datastreaming is een techniek om gegevens over te dragen zodat deze als een gestage en continue stroom kunnen worden verwerkt. Streamingtechnologieën worden steeds belangrijker met de groei van internet.



Wat is streaming - Spark-streaming - EdurekaFiguur: Wat is streaming?

Waarom Spark-streaming?

We kunnen Spark Streaming gebruiken om realtime gegevens uit verschillende bronnen zoals Twitter, Stock Market en geografische systemen te streamen en krachtige analyses uit te voeren om bedrijven te helpen.

Figuur: Waarom Spark-streaming?



wat is bijvoorbeeld in java

Spark Streaming Overzicht

Spark-streaming wordt gebruikt voor het verwerken van real-time streaminggegevens. Het is een nuttige aanvulling op de kern-Spark API. Spark Streaming maakt high-throughput en fouttolerante streamverwerking van live datastromen mogelijk.

Figuur: Streams in Spark Streaming

De fundamentele streameenheid is DStreamwat in feite een reeks RDD's is om de real-time gegevens te verwerken.

Spark-streamingfuncties

  1. Schalen: Spark Streaming kan eenvoudig worden geschaald naar honderden knooppunten.
  2. Snelheid: Het eenbehaalt een lage latentie.
  3. Fouttolerantie: Spark heeft de mogelijkheid om eherstel fficiënt van storingen.
  4. Integratie: Spark kan worden geïntegreerd met batchverwerking en realtime verwerking.
  5. Bedrijfsanalyse: Spark Streaming is used om het gedrag van klanten te volgen dat kan worden gebruikt in bedrijfsanalyses.

Spark Streaming-workflow

De Spark Streaming-workflow heeft vier fasen op hoog niveau. De eerste is om gegevens uit verschillende bronnen te streamen. Deze bronnen kunnen streaming databronnen zijn zoals Akka, Kafka, Flume, AWS of Parquet voor real-time streaming. Het tweede type bronnen omvat HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB en Cassandra voor statische / batch-streaming. Zodra dit gebeurt, kan Spark worden gebruikt om Machine Learning op de gegevens uit te voeren via de MLlib API. Verder wordt Spark SQL gebruikt om verdere bewerkingen op deze gegevens uit te voeren. Ten slotte kan de streaming-uitvoer worden opgeslagen in verschillende gegevensopslagsystemen zoals HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS en lokaal bestandssysteem.

Figuur: Overzicht van Spark-streaming

Spark Streaming Fundamentals

  1. Streamingcontext
  2. DStream
  3. Caching
  4. Accumulatoren, uitgezonden variabelen en controlepunten

Streamingcontext

Streamingcontext verbruikt een gegevensstroom in Spark. Het registreert een Voer DStream in om een Ontvanger voorwerp. Het is het belangrijkste toegangspunt voor Spark-functionaliteit. Spark biedt een aantal standaardimplementaties van bronnen zoals Twitter, Akka Actor en ZeroMQ die toegankelijk zijn vanuit de context.

Een StreamingContext-object kan worden gemaakt op basis van een SparkContext-object. Een SparkContext vertegenwoordigt de verbinding met een Spark-cluster en kan worden gebruikt om RDD's, accumulatoren en uitzendvariabelen op dat cluster te maken.

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

DStream

Gediscretiseerde stream (DStream) is de basis abstractie die wordt geboden door Spark Streaming. Het is een continue stroom gegevens. Het wordt ontvangen van een gegevensbron of een verwerkte gegevensstroom die wordt gegenereerd door de invoerstroom te transformeren.

Figuur: Woorden extraheren uit een Input DStream

Intern wordt een DStream vertegenwoordigd door een continue reeks RDD's en elke RDD bevat gegevens van een bepaald interval.

DStreams invoeren: Voer DStreams in zijn DStreams die de stroom invoergegevens vertegenwoordigen die zijn ontvangen van streamingbronnen.

Figuur: De ontvanger verzendt gegevens naar de Input DStream, waar elke batch RDD's bevat

Elke invoer DStream is gekoppeld aan een Receiver-object dat de gegevens van een bron ontvangt en voor verwerking in het geheugen van Spark opslaat.

Transformaties op DStreams:

Elke bewerking die op een DStream wordt toegepast, vertaalt zich naar bewerkingen op de onderliggende RDD's. Met transformaties kunnen de gegevens van de invoer DStream worden gewijzigd op dezelfde manier als RDD's. DStreams ondersteunen veel van de transformaties die beschikbaar zijn op normale Spark RDD's.

Figuur: DStream-transformaties

Hieronder volgen enkele van de populaire transformaties op DStreams:

kaart( func )kaart( func ) geeft een nieuwe DStream terug door elk element van de bron DStream door een functie te laten gaan func.
flatMap ( func )flatMap ( func ) is vergelijkbaar met kaart ( func ) maar elk invoeritem kan worden toegewezen aan 0 of meer uitvoeritems en retourneert een nieuwe DStream door elk bronelement door een functie te leiden func.
filter( func )filter( func ) geeft een nieuwe DStream terug door alleen de records van de bron DStream te selecteren waarop func geeft true terug.
verminderen( func )verminderen( func ) retourneert een nieuwe DStream van RDD's met één element door de elementen in elke RDD van de bron DStream samen te voegen met behulp van een functie func .
groupBy ( func )groupBy ( func ) geeft de nieuwe RDD terug die in feite bestaat uit een sleutel en een bijbehorende lijst met items van die groep.

DStreams uitvoeren:

Met uitvoerbewerkingen kunnen de gegevens van DStream worden gepusht naar externe systemen zoals databases of bestandssystemen. Uitvoerbewerkingen activeren de daadwerkelijke uitvoering van alle DStream-transformaties.

Figuur: Uitvoerbewerkingen op DStreams

Caching

DStreams ontwikkelaars toestaan ​​om de gegevens van de stream in het geheugen te cachen / behouden. Dit is handig als de gegevens in de DStream meerdere keren worden berekend. Dit kan gedaan worden met de volharden () methode op een DStream.

Figuur: Caching in 2 knooppunten

Voor invoerstromen die gegevens ontvangen via het netwerk (zoals Kafka, Flume, Sockets, enz.),het standaard persistentieniveau is ingesteld om de gegevens naar twee knooppunten te repliceren voor fouttolerantie.

Accumulatoren, uitgezonden variabelen en controlepunten

Accumulatoren: Accumulatoren zijn variabelen die alleen worden toegevoegd via een associatieve en commutatieve bewerking. Ze worden gebruikt om tellers of sommen te implementeren. Het bijhouden van accumulatoren in de gebruikersinterface kan handig zijn om de voortgang van lopende fasen te begrijpen. Spark ondersteunt native numerieke accumulatoren. We kunnen accumulatoren met of zonder naam maken.

Broadcast-variabelen: Broadcast-variabelen sta de programmeur toe om een ​​alleen-lezen variabele in de cache op elke machine te bewaren in plaats van een kopie ervan met taken te verzenden. Ze kunnen worden gebruikt om op een efficiënte manier elk knooppunt een kopie te geven van een grote invoergegevensset. Spark probeert ook uitzendvariabelen te verspreiden met behulp van efficiënte uitzendalgoritmen om de communicatiekosten te verlagen.

IJkpunten: IJkpunten zijn vergelijkbaar met checkpoints in gaming. Ze zorgen ervoor dat het 24/7 draait en maakt het bestand tegen storingen die geen verband houden met de applicatielogica.


Figuur:
Kenmerken van Checkpoints

Gebruiksvoorbeeld - Twitter-sentimentanalyse

Nu we de kernconcepten van Spark Streaming hebben begrepen, kunnen we een realistisch probleem oplossen met Spark Streaming.

Probleemstelling: Om een ​​Twitter-sentimentanalysesysteem te ontwerpen waarin we realtime sentimenten voor crisisbeheer, serviceaanpassing en doelmarketing invullen.

Toepassingen van sentimentanalyse:

  • Voorspel het succes van een film
  • Voorspel het succes van een politieke campagne
  • Beslis of u in een bepaald bedrijf wilt investeren
  • Gerichte reclame
  • Beoordeel producten en diensten

Spark Streaming-implementatie:

Zoek de pseudo-code hieronder:

// Importeer de benodigde pakketten in het Spark-programma 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} // RDD-transformatie met behulp van sortBy en vervolgens kaartfunctie tags.countByValue () .foreachRDD {rdd => val now = Verkrijg de huidige tijd van elke Tweet rdd .sortBy (_._ 2) .map (x => (x, nu)) // Onze uitvoer opslaan op ~ / twitter / directory .saveAsTextFile (s '~ / twitter / $ now')} // DStream-transformatie met behulp van filter- en kaartfuncties val tweets = stream.filter {t => val tags = t. Splitsen op Spaces .filter (_. StartsWith ('#')). Omzetten in kleine letters 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 () // Opslaan van onze output op ~ / met bestandsnamen die beginnen als twitters data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}

Resultaten:

Hieronder volgen de resultaten die worden weergegeven in de Eclipse IDE tijdens het uitvoeren van het Twitter Sentiment Streaming-programma.

Figuur: Uitvoer van sentimentanalyse in Eclipse IDE

Zoals we in de schermafbeelding kunnen zien, zijn alle tweets onderverdeeld in Positief, Neutraal en Negatief volgens het sentiment van de inhoud van de tweets.

De uitvoer van de gevoelens van de tweets wordt opgeslagen in mappen en bestanden op basis van het tijdstip waarop ze zijn gemaakt. Deze uitvoer kan indien nodig op het lokale bestandssysteem of HDFS worden opgeslagen. De uitvoermap ziet er als volgt uit:

Figuur: Uitvoermappen in onze ‘twitter’ projectmap

Hier, in de twitter-directory, kunnen we de gebruikersnamen van de Twitter-gebruikers vinden, samen met het tijdstempel voor elke tweet, zoals hieronder weergegeven:

Figuur: Uitvoerbestand met Twitter-gebruikersnamen met tijdstempel

Nu we de Twitter-gebruikersnamen en tijdstempel hebben, laten we eens kijken naar de sentimenten en tweets die zijn opgeslagen in de hoofddirectory. Hier wordt elke tweet gevolgd door de sentiment-emotie. Dit Sentiment dat wordt opgeslagen, wordt verder gebruikt voor het analyseren van een grote hoeveelheid aan inzichten van bedrijven.

Figuur: Uitvoerbestand met tweets met gevoelens

Code aanpassen:

Laten we nu onze code een beetje aanpassen om gevoelens voor specifieke hashtags (onderwerpen) te krijgen. Momenteel is Donald Trump, de president van de Verenigde Staten, trending op nieuwskanalen en online sociale media. Laten we eens kijken naar de gevoelens die zijn gekoppeld aan het zoekwoord ‘ Troef ‘.

Figuur: Sentimentanalyse uitvoeren op tweets met het trefwoord ‘Trump’

Doorgaan:

Zoals we hebben gezien tijdens onze demonstratie van sentimentanalyse, kunnen we sentimenten van bepaalde onderwerpen extraheren, net zoals we deden voor ‘Trump’. Evenzo kan Sentiment Analytics worden gebruikt bij crisismanagement, serviceaanpassing en doelmarketing door bedrijven over de hele wereld.

Bedrijven die Spark Streaming gebruiken voor sentimentanalyse hebben dezelfde aanpak toegepast om het volgende te bereiken:

  1. Verbetering van de klantervaring
  2. Concurrentievoordeel behalen
  3. Business Intelligence verwerven
  4. Een verliezend merk nieuw leven inblazen

Hiermee zijn we hier aan het einde gekomen Spark Streaming-zelfstudie blog. U moet nu een goed begrip hebben gekregen van wat Spark Streaming is. De use case van Twitter Sentiment Analysis geeft je het vereiste vertrouwen om te werken aan toekomstige projecten die je tegenkomt in Spark Streaming en Apache Spark. Oefening is de sleutel tot het beheersen van elk onderwerp en ik hoop dat deze blog genoeg interesse in je heeft gewekt om verder te verkennen op Apache Spark.

We raden de volgende Spark Streaming YouTube-zelfstudie van Edureka aan om mee te beginnen:

Spark-streaming | Voorbeeld van Twitter-sentimentanalyse | Edureka

Deze videoserie over Spark-zelfstudie biedt een volledige achtergrond van de componenten, samen met praktijkvoorbeelden zoals Twitter-sentimentanalyse , NBA-spelvoorspellingsanalyse , Aardbevingsdetectiesysteem , Vluchtgegevensanalyse en Systemen voor filmaanbevelingen . We hebben de gebruiksscenario's persoonlijk ontworpen om iedereen die de code gebruikt, een allround expertise te bieden.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen zo spoedig mogelijk contact met u op. Als je Spark wilt leren en een carrière wilt opbouwen in het domein van Spark en expertise wilt opbouwen om grootschalige gegevensverwerking uit te voeren met behulp van RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​en Scala met Real Life use-cases, bekijk dan onze interactieve, live online hier, dat wordt geleverd met 24 * 7 ondersteuning om u tijdens uw leerperiode te begeleiden.