מדריך הזרמת ניצוצות - ניתוח סנטימנטים באמצעות Apache Spark



בלוג הזרמת ניצוצות זה יציג בפניכם את ניצוץ הניצוץ, תכונותיו ורכיביו. הוא כולל פרויקט ניתוח סנטימנט באמצעות טוויטר.

הזרמת ניצוצות היא הרחבה של ממשק ה- API של הניצוץ המרכזי המאפשר עיבוד זרם מדרגי, תפוקה גבוהה וסובלני לתקלות של זרמי נתונים חיים. באמצעות זרם ניצוצות ניתן להזרים נתונים חיים ועיבוד יכול לקרות בזמן אמת. בסיס המשתמשים ההולך וגדל של Spark Streaming מורכב משמות ביתיים כמו Uber, Netflix ו- Pinterest.

כשמדובר בניתוח נתונים בזמן אמת, הזרמת ניצוצות מספקת פלטפורמה אחת לבלוע נתונים לעיבוד מהיר וחי מוכיח את המיומנות שלך באותו דבר.דרך הבלוג הזה אציג בפניכם את התחום המרתק החדש הזה של ניצוץ ניצוצות ונעבור מקרה שימוש מלא, ניתוח סנטימנט בטוויטר באמצעות הזרמת ניצוצות.





להלן הנושאים שיוסקרו בבלוג זה:

  1. מה זה סטרימינג?
  2. למה הזרמת ניצוצות?
  3. סקירה כללית על הזרמת ניצוצות
  4. תכונות הזרמת ניצוצות
  5. יסודות הזרמת ניצוצות
    5.1 הקשר סטרימינג
    5.2 DStream
    5.3 מטמון / התמדה
    5.4 מצברים, משתני שידור ומחסומים
  6. שימוש במקרה - ניתוח סנטימנט בטוויטר

מה זה סטרימינג?

הזרמת נתונים היא טכניקה להעברת נתונים כך שניתן יהיה לעבד אותם כזרם יציב ורציף. טכנולוגיות הזרמה הופכות לחשובות יותר ויותר עם צמיחת האינטרנט.



מה זה סטרימינג - ניצוץ ניצוצות - אדוריקהדמות: מה זה סטרימינג?

מהי אנקונדה לפיתון

למה הזרמת ניצוצות?

אנו יכולים להשתמש בזרם ניצוצות כדי להזרים נתונים בזמן אמת ממקורות שונים כמו טוויטר, שוק המניות ומערכות גיאוגרפיות ולבצע ניתוחים רבי עוצמה כדי לעזור לעסקים.

דמות: למה הזרמת ניצוצות?



סקירה כללית על הזרמת ניצוצות

הזרמת ניצוצות משמש לעיבוד נתוני סטרימינג בזמן אמת. זו תוספת שימושית ל- API של Spark הליבה. הזרמת ניצוצות מאפשרת תפוקה גבוהה ועיבוד זרם סובלני לתקלות בזרמי נתונים חיים.

דמות: זרמים בזרם ניצוצות

יחידת הזרם הבסיסית היא DStreamשהיא בעצם סדרה של RDD לעיבוד הנתונים בזמן אמת.

תכונות הזרמת ניצוצות

  1. דֵרוּג: הזרמת ניצוצות יכולה להשתנות בקלות למאות צמתים.
  2. מְהִירוּת: זה אשובר חביון נמוך.
  3. סובלנות תקלה: לניצוץ יש את היכולת eלהתאושש מספיק מכישלונות.
  4. שילוב: ניצוץ משתלב בעיבוד אצווה ובזמן אמת.
  5. ניתוח עסקי: הזרמת ניצוצות היא Used כדי לעקוב אחר התנהגות הלקוחות שניתן להשתמש בהם בניתוח עסקי.

זרימת עבודה בזרימת ניצוצות

לתהליך העבודה של הזרמת ניצוצות יש ארבעה שלבים ברמה גבוהה. הראשון הוא להזרים נתונים ממקורות שונים. מקורות אלו יכולים להיות מקורות סטרימינג של נתונים כמו Akka, Kafka, Flume, AWS או Parquet להזרמה בזמן אמת. הסוג השני של המקורות כולל HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB ו- Cassandra לזרם סטטי / אצווה. ברגע שזה קורה, ניתן להשתמש ב- Spark לביצוע Machine Learning על הנתונים באמצעות ה- MLlib API שלו. יתר על כן, Spark SQL משמש לביצוע פעולות נוספות על נתונים אלה. לבסוף, ניתן לאחסן את פלט הסטרימינג במערכות אחסון נתונים שונות כמו HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS ומערכת קבצים מקומית.

דמות: סקירה כללית של הזרמת ניצוצות

יסודות הזרמת ניצוצות

  1. הקשר סטרימינג
  2. DStream
  3. מטמון
  4. מצברים, משתני שידור ומחסומים

הקשר סטרימינג

הקשר סטרימינג צורכת זרם נתונים ב- Spark. זה רושם קלט DStream לייצר א מַקְלֵט לְהִתְנַגֵד. זוהי נקודת הכניסה העיקרית לפונקציונליות של Spark. Spark מספק מספר יישומי ברירת מחדל של מקורות כמו Twitter, Akka Actor ו- ZeroMQ הנגישים מהקשר.

ניתן ליצור אובייקט StreamingContext מאובייקט SparkContext. SparkContext מייצג את החיבור לאשכול Spark וניתן להשתמש בו ליצירת RDDs, צברים ומשתנים שידור באותו אשכול.

יבוא org.apache.spark._ יבוא org.apache.spark.streaming._ var ssc = חדש StreamingContext (sc, שניות (1))

DStream

זרם דיסקרטי (DStream) היא ההפשטה הבסיסית שמספקת הזרמת ניצוצות. זהו זרם נתונים רציף. הוא מתקבל ממקור נתונים או מזרם נתונים מעובד שנוצר על ידי הפיכת זרם הקלט.

דמות: חילוץ מילים מ- DStream קלט

באופן פנימי, DStream מיוצג על ידי סדרה מתמשכת של RDD וכל RDD מכיל נתונים מרווח מסוים.

קלט DStreams: קלט DStreams הם DStreams המייצגים את זרם נתוני הקלט המתקבלים ממקורות הזרמה.

דמות: המקלט שולח נתונים אל DStream הקלט שבו כל אצווה מכילה RDD

כל קלט DStream משויך לאובייקט מקלט שמקבל את הנתונים ממקור ושומר אותם בזיכרון של Spark לעיבוד.

טרנספורמציות ב- DStreams:

כל פעולה המופעלת ב- DStream מתורגמת לפעולות ב- RDD הבסיסיות. טרנספורמציות מאפשרות לשנות את הנתונים מה- DStream הקלט בדומה ל- RDD. DStreams תומכים ברבים מהטרנספורמציות הזמינות ב- RDD רגילים של Spark.

דמות: טרנספורמציות DStream

להלן כמה מהשינויים הפופולריים ב- DStreams:

מַפָּה( פונק )מַפָּה( פונק ) מחזיר DStream חדש על ידי העברת כל אלמנט מהמקור DStream דרך פונקציה פונק.
flatMap ( פונק )flatMap ( פונק ) דומה למפה ( פונק ) אך ניתן למפות כל פריט קלט ל -0 פריטי פלט או יותר ומחזיר DStream חדש על ידי העברת כל אלמנט מקור דרך פונקציה פונק.
לְסַנֵן( פונק )לְסַנֵן( פונק ) מחזיר DStream חדש על ידי בחירה רק ברשומות המקור DStream שעליו פונק מחזיר נכון.
לְהַפחִית( פונק )לְהַפחִית( פונק ) מחזיר DStream חדש של RDDs עם אלמנטים בודדים על ידי צבירת האלמנטים בכל RDD של המקור DStream באמצעות פונקציה פונק .
groupBy ( פונק )groupBy ( פונק ) מחזיר את ה- RDD החדש אשר בעצם מורכב ממפתח ורשימה מתאימה של פריטים מאותה קבוצה.

פלט DStreams:

פעולות פלט מאפשרות לדחוף את הנתונים של DStream למערכות חיצוניות כמו מסדי נתונים או מערכות קבצים. פעולות פלט מפעילות את הביצוע בפועל של כל טרנספורמציות ה- DStream.

דמות: פעולות פלט ב- DStreams

מטמון

DStreams לאפשר למפתחים לשמור או לשמור את נתוני הזרם בזיכרון. זה שימושי אם הנתונים ב- DStream יחושבו מספר פעמים. ניתן לעשות זאת באמצעות ה- להתמיד() שיטה ב- DStream.

דמות: שמירה במטמון לשני צמתים

עבור זרמי קלט שמקבלים נתונים ברשת (כגון קפקא, פלומה, שקעים וכו '),רמת ההתמדה המוגדרת כברירת מחדל מוגדרת לשכפל את הנתונים לשני צמתים לצורך סובלנות תקלות.

מצברים, משתני שידור ומחסומים

מצברים: מצברים הם משתנים שמתווספים רק באמצעות פעולה אסוציאטיבית וקומוטטיבית. הם משמשים ליישום דלפקים או סכומים. מעקב אחר צברים בממשק המשתמש יכול להיות שימושי להבנת התקדמות שלבי הריצה. ניצוץ תומך באופן מקורי בצברים מספריים. אנו יכולים ליצור מצברים בעלי שם או שם.

משתנים משודרים: משתנים משודרים אפשר למתכנת לשמור משתנה לקריאה בלבד במטמון בכל מכונה במקום לשלוח עותק ממנה עם משימות. בעזרתם ניתן לתת לכל צומת עותק של מערך קלט גדול בצורה יעילה. Spark מנסה גם להפיץ משתני שידור באמצעות אלגוריתמי שידור יעילים להפחתת עלות התקשורת.

מחסומים: מחסומים דומים למחסומים במשחקים. הם גורמים לו לפעול 24/7 ולהפוך אותו לעמיד בפני כשלים שאינם קשורים להיגיון היישומים.


דמות:
תכונות של מחסומים

שימוש במקרה - ניתוח סנטימנט בטוויטר

כעת, לאחר שהבנו את מושגי הליבה של הזרמת ניצוצות, בואו נפתור בעיה אמיתית באמצעות ניצוץ ניצוצות.

הצהרת בעיה: לתכנן מערכת ניתוח סנטימנטים בטוויטר בה אנו מאכלסים סנטימנטים בזמן אמת לניהול משברים, התאמת שירות ושיווק יעד.

יישומי ניתוח רגש:

  • חיזו את הצלחתו של סרט
  • חיזו הצלחה בקמפיין פוליטי
  • החליטו אם להשקיע בחברה מסוימת
  • פרסום ממוקד
  • סקור מוצרים ושירותים

יישום הזרמת ניצוצות:

מצא את קוד הפסאודו למטה:

// ייבא את החבילות הדרושות לתכנית הניצוץ לייבא org.apache.spark.streaming. {שניות, StreamingContext} ייבא org.apache.spark.SparkContext._ ... ייבא java.io.File אובייקט 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 =>קבל טקסט מההאשטגים} // טרנספורמציה RDD באמצעות תגי פונקציית sortBy ואז map.countByValue () .foreachRDD {rdd => val now = קבל את הזמן הנוכחי של כל tweet rdd .sortBy (_._ 2) .map (x => (x, עכשיו)) // שמירת הפלט שלנו ב- ~ / twitter / directory .saveAsTextFile (s '~ / twitter / $ now')} // טרנספורמציית DStream באמצעות פונקציות סינון ומפה val tweets = stream.filter {t => תגי val = t. פיצול רווחים .פילטר (_. StartsWith ('#')). המרה לתגים קטנים.קיים {x => נכון}} 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 () // שמירת הפלט שלנו ב- ~ / עם שמות קבצים שמתחילים כמו data twitters.saveAsTextFiles ('~ / twitters', '20000') ssc. התחל () ssc.awaitTermination ()}}

תוצאות:

להלן התוצאות המוצגות ב- Eclipse IDE בזמן הפעלת תוכנית הזרמת סנטימנט הטוויטר.

דמות: פלט ניתוח סנטימנט ב- Eclipse IDE

כפי שאנו יכולים לראות בצילום המסך, כל הציוצים מסווגים לחיוביים, ניטרליים ושליליים לפי תחושת התוכן של הציוצים.

הפלט של הרגשות של הציוצים נשמר בתיקיות וקבצים בהתאם למועד יצירתם. ניתן לאחסן פלט זה במערכת הקבצים המקומית או ב- HDFS לפי הצורך. ספריית הפלט נראית כך:

דמות: פלט תיקיות בתוך תיקיית הפרויקט 'טוויטר' שלנו

כאן, בתוך מדריך הטוויטר, אנו יכולים למצוא את שמות המשתמשים של משתמשי הטוויטר יחד עם חותמת הזמן לכל ציוץ כפי שמוצג להלן:

איך להכין jframe בג'אווה - -

דמות: קובץ פלט המכיל שמות משתמש בטוויטר עם חותמת זמן

כעת, לאחר שקיבלנו את שמות המשתמשים של טוויטר ואת חותמת הזמן, הבה נבחן את התחושות והציוצים המאוחסנים בספריה הראשית. כאן, אחרי כל ציוץ מלווה רגש הסנטימנט. סנטימנט זה המאוחסן משמש עוד לניתוח שפע עצום של תובנות על ידי חברות.

דמות: קובץ פלט המכיל ציוצים עם סנטימנטים

קוד לצבוט:

עכשיו, בואו ונשתנה מעט את הקוד שלנו כדי לקבל סנטימנטים עבור hashtags (נושאים) ספציפיים. נכון לעכשיו, דונלד טראמפ, נשיא ארצות הברית עוסק בערוצי חדשות וברשתות החברתיות המקוונות. הבה נבחן את התחושות הקשורות למילת המפתח ' חֶברְמַן '.

דמות: ביצוע ניתוח סנטימנטים בציוצים עם מילת המפתח 'טראמפ'

זז קדימה:

כפי שראינו מהפגנת ניתוח הסנטימנטים שלנו, אנו יכולים לחלץ רגשות של נושאים מסוימים בדיוק כמו שעשינו עבור 'טראמפ'. באופן דומה, ניתן להשתמש ב- Sentiment Analytics בניהול משברים, התאמת שירותים ושיווק יעד על ידי חברות ברחבי העולם.

חברות המשתמשות בזרם ניצוצות לניתוח סנטימנטים השתמשו באותה גישה כדי להשיג את הדברים הבאים:

  1. שיפור חווית הלקוח
  2. השגת יתרון תחרותי
  3. השגת מודיעין עסקי
  4. החייאת מותג מאבד

עם זה הגענו לסוף זה מדריך הזרמת ניצוצות בלוג. נכון לעכשיו, בוודאי רכשת הבנה קולית של מה זה ספארק סטרימינג. מקרה השימוש בניתוח סנטימנט טוויטר ייתן לך את הביטחון הנדרש לעבוד על כל פרויקטים עתידיים שתיתקל בהם ב- Spark Streaming ו- Apache Spark. תרגול הוא המפתח לשליטה בכל נושא ואני מקווה שהבלוג הזה יצר בך מספיק עניין כדי לחקור עוד יותר את Apache Spark.

אנו ממליצים על הדרכת YouTube בנושא הזרמת ניצוצות מאדוריקה מלכתחילה:

הזרמת ניצוצות | דוגמא לניתוח סנטימנט בטוויטר אדוריקה

סדרת וידאו זו במדריך הניצוצות מספקת רקע מלא לרכיבים יחד עם מקרי שימוש אמיתיים כמו ניתוח סנטימנט בטוויטר , ניתוח חיזוי משחק NBA , מערכת גילוי רעידות אדמה , ניתוח נתוני טיסה ו מערכות המלצות על סרטים . תכננו באופן אישי את מקרי השימוש בכדי לספק מומחיות כוללת לכל מי שמפעיל את הקוד.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך בהקדם. אם ברצונך ללמוד Spark ולבנות קריירה בתחום ה- Spark ולבנות מומחיות לביצוע עיבוד נתונים בקנה מידה גדול באמצעות RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​ו- Scala עם מקרי שימוש אמיתיים, בדוק את האינטראקטיבי שלנו, בשידור חי באינטרנט כאן, שמגיע עם תמיכה 24 * 7 שתדריך אותך לאורך כל תקופת הלמידה שלך.