הסבירו צברי ניצוצות: ניצוץ אפאצ'י



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

תורם על ידי Prithviraj Bose

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





מהם מצברים?

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

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



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

לעקוף לעומת עומס יתר c ++
logs-Spark-accumulators

ישנם 4 שדות,

שדה 1 -> עיר



שדה 2 -> יישוב

שדה 3 -> קטגוריית הפריט שנמכר

שדה 4 -> ערך הפריט שנמכר

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

אנו יכולים להשתמש בצברים כדי לנתח את יומן העסקאות כדי לגלות את מספר היומנים הריקים (שורות ריקות), מספר הפעמים שהרשת נכשלה, כל מוצר שאין בו קטגוריה או אפילו מספר הפעמים שנרשמו אפס מכירות. ניתן למצוא את יומן המדגם המלא כאן .
הצברנים חלים על כל פעולה שהם,
1. קומוטטיבי -> f (x, y) = f (y, x) , ו
2. אסוציאטיבי -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
לדוגמה, סְכוּם ו מקסימום פונקציות עומדות בתנאים לעיל ואילו מְמוּצָע לא.

חלקים מתוכנית Java

מדוע להשתמש במצברי ניצוצות?

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

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

זה מבטיח כי המצבר blankLines מתעדכן בכל ביצועים והעדכונים מועברים חזרה לנהג.

להעלות מספר לעוצמה בג'אווה

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

אנשים שמכירים את Hadoop Map-Reduce יבחינו שהמצברים של Spark דומים לדלפקים של Hadoop Map-Reduce.

אזהרות

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

  1. חישובים בפנים טרנספורמציות מוערכים בעצלתיים, אז אלא אם כן פעולה קורה ב- RDD טרנספורמציות אינם מוצאים להורג. כתוצאה מכך, מצברים השתמשו בפונקציות כמו מַפָּה() אוֹ לְסַנֵן() לא יוצא להורג אלא אם כן חלקם פעולה לקרות ב- RDD.
  2. Spark מבטיחה עדכון מצברים בְּתוֹך פעולות רק פעם אחת . כך שגם אם משימה תופעל מחדש והשושלת תחשב מחדש, הצברים יעודכנו פעם אחת בלבד.
  3. ניצוץ אינו מתחייב לכך עבור טרנספורמציות . כך שאם משימה מופעלת מחדש והשושלת מחושבת מחדש, יש סיכוי לתופעות לוואי לא רצויות כאשר הצברים יעודכנו יותר מפעם אחת.

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

יש לך שאלה עבורנו? הזכר אותם בסעיף ההערות ונחזור אליך.

פוסטים קשורים:

Apache Spark combineByKey הסביר