spark2

שאלות מראיונות עבודה Data Engineer- Spark (ספארק לדאטה אנג'ניר)

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

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

יתרה מכך, ספריית ה-API העשירה של Spark עבור מניפולציה של נתונים, למידת מכונה ועיבוד גרפים הופכת אותו לכלי רב-תכליתי שיכול להתמודד עם מגוון רחב של משימות הנדסת נתונים. השילוב שלו עם טכנולוגיות ביג דאטה אחרות כמו Hadoop, Kafka ו- Cassandra, מאפשר למהנדסי נתונים לבנות תהליכי עיבוד נתונים מלאים בקלות.

כדי להמחיש את החשיבות של Spark בהנדסת נתונים, הנה דוגמה לשאלה שמועמד להנדסת נתונים עשוי להיתקל בה בראיון עבודה:

  1. מהו Apache Spark?
  2. מהו Pyspark?
  3. מה הקשר בין PySpark ל- Apache Spark?
  4. מהם היתרונות של שימוש ב-PySpark על פני מסגרות עיבוד נתונים אחרות מבוססות Python?
  5. מה זה RDD ב-Spark? האם אתה יכול להסביר את חשיבותו ב-PySpark?
  6. מהו DataFrame ב- PySpark, ובמה הוא שונה מ-RDD?
  7. מדוע pyspark מוגדר כ lazy, ולמה זה כל כך חשוב?
  8. איך מכוונים את הביצועים של עבודות PySpark לשימוש בצורה מקסימלית?
  9. מהי המטרה של מודול PySpark SQL?
  10. מהו Spark driver?
  11. מה ההבדל בין task לstage ב-Spark?
  12. מה האפשרויות טיפול בערכים חסרים ב-PySpark?
  13. מהו broadcast ב-PySpark?מדוע משתמשים בו?
  14. מה ההבדל בין cache() ל-persist() ב-PySpark?
  15. מהי אפליקציית Spark streaming ובמה היא שונה מאפליקציית batch של Spark?
  16. מהו Spark partition וכיצד הוא משפיע על הביצועים של עבודת PySpark?
  17. מה ההבדל בין map ל-flatMap ב-PySpark?

תשובות:

  1. מהו Apache Spark?
    Apache Spark היא מערכת מחשוב מבוזרת בקוד פתוח המיועדת לעיבוד נתונים גדולים. הוא מספק מסגרת מאוחדת לעיבוד עומסי עבודה batch, streaming ועומסי עבודה גדולים ומשתנים. Spark תומך במקורות נתונים שונים, כולל Hadoop Distributed File System (HDFS), Apache Cassandra, Apache HBase ואמזון S3, בין היתר.

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

    Spark בנוי סביב core engine המספק תזמון משימות מבוזר, ניהול זיכרון ועמידים בפני תקלות. הוא גם מספק מגוון של ממשקי API ברמה גבוהה לעיבוד batch (Spark SQL ו-DataFrames), עיבוד סטרימינג (Spark Streaming), למידת מכונה (Spark MLlib) ועיבוד גרפים (GraphX).
    Spark הפכה לאחת ממסגרות עיבוד הביג דאטה הפופולריות ביותר בזכות העיבוד המהיר והיעיל שלה, תמיכה במספר שפות תכנות ושילוב קל עם כלים וטכנולוגיות ביג דאטה הקיימים בשוק.

  2. מהו Pyspark?
    PySpark הוא ה-API של Python עבור Apache Spark, מערכת מחשוב מבוזרת בקוד פתוח המשמשת לעיבוד וניתוח ביג דאטה. PySpark מספקת ממשק תכנות פשוט וקל לשימוש עבור מפתחי Python לאינטראקציה עם Spark, ומאפשר להם להשתמש ב-Python כדי לכתוב משימות עיבוד נתונים וניתוח מורכבות שיכולות לרוץ על הקלסטר.

  3. מה הקשר בין PySpark ל- Apache Spark?
    PySpark הוא אחד מממשקי ה-API הזמינים ב- Apache Spark.
    Apache Spark היא מערכת מחשוב מבוזרת המספקת מספר ממשקי API לעיבוד וניתוח נתונים, כולל Scala, Java, Python ו-R.
    PySpark הוא ה-API של Python עבור Apache Spark, המאפשר למפתחים להשתמש ב-Python כדי לכתוב קוד שפועל על קלסטר של Spark.

  4. מהם היתרונות של שימוש ב-PySpark על פני מסגרות עיבוד נתונים אחרות מבוססות Python?
    PySpark מציעה מספר יתרונות על פני מסגרות עיבוד נתונים אחרות מבוססות Python, כולל:

    • Scalability: כתיבה ב PySpark נועד לרוץ על קלסטר, מה שהופך אותו לסקלביליות עבור מערכי נתונים גדולים ומשימות עיבוד מורכבות.
    • מהירות: שימוש בPySpark מותאמת לביצועים, ומאפשרת עיבוד וניתוח נתונים מהירים.
    • קלות: PySpark מספקת ממשק תכנות פשוט וקל לשימוש עבור מפתחי Python, מה שמקל על כתיבת משימות עיבוד נתונים מורכבות.
    • אינטגרציה עם כלי עיבוד נתונים אחרים: PySpark יכול להשתלב בקלות עם כלי עיבוד נתונים אחרים במערכת האקולוגית של Hadoop, כגון Hadoop Distributed File System (HDFS), Apache Hive ו- Apache HBase.
    • גמישות: PySpark תומך במגוון רחב של מקורות נתונים ופורמטים של קבצים, כולל CSV, JSON, Avro ו-Parquet, מה שהופך אותו לגמיש לצרכי עיבוד נתונים שונים.

  5. מה זה RDD ב-Spark? האם אתה יכול להסביר את חשיבותו ב-PySpark?
    RDD קיצור של Resilient Distributed Datasets, שהוא מבנה הנתונים הבסיסי ב-Spark.
    RDDsהם אוסף של אובייקטים שלא ניתנים לשינוי ומפוזרים על גבי השרתים בקלאסטר ולכן הם הם סקליבליים ועמידים בפני תקלות.
    RDDs חשובים ב- PySpark מכיוון שהם מספקים דרך לבצע עיבוד מבוזר של מערכי נתונים גדולים באופן מקביל ועמיד בפני תקלות. RDDs ניתנים לשינוי ולתמרן באמצעות פעולות שונות שמספק Spark, כגון map(), reduce(), filter() ועוד…

  6. מהו DataFrame ב- PySpark, ובמה הוא שונה מ-RDD?
    Spark RDD (Resilient Distributed Dataset) הוא אוסף מבוזר בלתי ניתן לשינוי של נתונים שניתן לעבד במקביל על פני קלאסר של מכונות.
    RDD יכול להכיל כל סוג של נתונים, כולל נתונים מובנים, חצי מובנים או לא מובנים.
    זהו מבנה הנתונים הבסיסי ב-Spark.


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

  7. מדוע PySpark מוגדר כ lazy, ולמה זה כל כך חשוב?
    lazy היא טכניקה המשמשת ב-PySpark כדי לעכב את ביצוע הפעולה עד שהיא נחוצה בפועל. ב-PySpark, פעולות על RDDs או DataFrames אינן מבוצעות מיד כאשר הן נקראות, אלא מונחות בתור בתוכנית לוגית. רק כאשר נקראת פעולה, כגון count() או collect(), התוכנית הלוגית מבוצעת והחישוב מתבצע.
    פעילות באמצעות lazy חשובה ב-PySpark מכיוון שהיא מאפשרת ביצוע יעיל יותר של חישובים, שכן המערכת יכולה לייעל את תוכנית ביצוע ולמנוע חישוב מיותר.

  8. איך מכוונים את הביצועים של עבודות PySpark לשימוש בצורה מקסימלית?
    ישנן מספר דרכים לכוונן את הביצועים של עבודות PySpark, כולל:

    • ניהול זיכרון: יש להקצות מספיק זיכרון לSpark executor ו- driver, והתאם את הגדרות הזיכרון לאחסון בcaching.
    • מקביליות: התאם את מספר ה partitions עבור RDDs ו-DataFrames, ואת מספר ה task עבור כל stage של החישוב.
    • Serialization: בחר את פורמט הSerialization המתאים עבור הנתונים, והשתמש בספריות Serialization יעילות כמו Apache Arrow או Kryo.
    • אופטימיזציה: השתמש בכלי האופטימיזציה של PySpark SQL כדי לייעל שאילתות SQL, והשתמש ב-DataFrame API במקום ב-RDD API לעיבוד יעיל יותר.
    • הקצאת משאבים: הגדר את הקצאת המשאבים עבור אשכול Spark, כולל ליבות CPU, זיכרון ורוחב פס רשת, כדי לייעל את הביצועים של עבודות PySpark.

  9. מהי המטרה של מודול PySpark SQL?
    מודול PySpark SQL מספק ממשק תכנות לעבודה עם נתונים מובנים באמצעות שאילתות SQL. זה מאפשר לך לבצע שאילתות SQL ב-DataFrame או בתצוגה, ומספק דרך לתפעל נתונים באמצעות פונקציות SQL.
    PySpark SQL מספק גם מנוע אופטימיזציה רב עוצמה שיכול לבצע אופטימיזציה של שאילתות SQL כדי לבצע אותן ביעילות בקלאסטר ב Spark.

  10. מהו Spark driver?
    Spark driver הינו התוכנית הראשית השולטת בביצוע של יישום Spark.
    Spark driver פועל על המחשב שבו האפליקציה מופעלת ואחראי על הגדרת ה-SparkContext, יצירת RDDs ו-DataFrames והגדרת החישוב שיש לבצע.
    Spark driver גם מתזמנת משימות בקלסטר של Spark, עוקבת אחר התקדמות החישוב ואוספת את התוצאות. היא אחראית לטיפול בשגיאות וחריגים המתרחשים במהלך החישוב ולניקוי כל המשאבים המשמשים את האפליקציה.

  11. מה ההבדל בין task לstage ב-Spark?
    ב-Spark, יחידת עבודה המתבצעת על partition אחד של נתונים נקרא task. task יכולה להיות כל פעולה ב-RDD או DataFrame, כגון map, reduce, filter, or join.
    stage הוא קבוצה של משימות שניתן לבצע במקביל מבלי לערבב נתונים ברחבי הרשת.
    stage מוגדר על ידי קבוצה של טרנספורמציות שניתן לחשב במקביל, כגון קבוצה של פעולות map ואחריהן פעולת filter.
    stage מחולק למשימות המבוצעות על partitions שונים של הנתונים.

  12. מה האפשרויות טיפול בערכים חסרים ב-PySpark?
    PySpark מספקת מספר שיטות לטיפול בערכים חסרים ב-DataFrames, כולל:
    • ()dropna: מסיר שורות המכילות ערכים חסרים.
    • ()fillna: מחליף ערכים חסרים בערך מוגדר או הממוצע והחציון של העמודה.
    • ()na.drop: מסיר שורות המכילות ערכים חסרים, עם אפשרויות לציין את המספר המינימלי של ערכים שאינם אפסים הנדרשים בשורה.
    • ()na.fill: מחליף ערכים חסרים בערך שצוין או הממוצע והחציון של עמודה, עם אפשרויות לציין את העמודות למילוי ואת ערך המילוי.

  13. מהו broadcast ב-PySpark?מדוע משתמשים בו?
    משתנה broadcast הוא משתנה לקריאה בלבד שנשמר ב cached בכל השרתים בקלסטר של  PySpark. הוא משמש להפצת כמות קטנה של נתונים, כגון טבלת בדיקת מידע, לכל השרתים בקלסטר . משתני broadcast שימושיים לשיפור הביצועים של פעולות join על ידי הפחתת כמות הנתונים שיש להעביר ברחבי הרשת.

  14. מה ההבדל בין cache() ל-persist() ב-PySpark?
    גם cache() וגם persist() משמשים כדי לשמור RDD או DataFrame בזיכרון. ההבדל ביניהם הוא ש-cache() הוא קיצור של persist() עם רמת האחסון שמוגדרת כברירת מחדל של MEMORY_ONLY, בעוד persist() מאפשרת לציין רמת אחסון שונה.

  15. מהי אפליקציית Spark streaming ובמה היא שונה מאפליקציית batch של Spark?
    אפליקציית הזרמת Spark היא אפליקציית עיבוד נתונים מבוזרת המעבדת זרמי נתונים בזמן אמת. זה מאפשר למפתחים לבנות יישומי עיבוד בזמן אמת, ניתנים להגדלת משאבים, ועמידים בפני תקלות באמצעות API ברמה גבוהה.
    אפליקציה לbatch, לעומת זאת, מעבדת נתונים בbatch, כלומר היא מעבדת כמות קבועה של נתונים בכל פעם, המאוחסנת בדרך כלל בקבצים או בבסיסי נתונים. עיבוד batch משמש בדרך כלל לעיבוד נתונים היסטוריים או הפעלת תהליכי עיבוד נתונים על בסיס תקופתי.

  16. מהו Spark partition וכיצד הוא משפיע על הביצועים של עבודת PySpark?
    Spark partition היא חלוקה לוגית של נתונים ב-RDD או DataFrame.
    partition היא תת-קבוצה קטנה של הנתונים, אותה ניתן לעבד במקביל על ידי מבצע או עובד יחיד. Spark מחלק נתונים באופן אוטומטי כאשר הוא קורא נתונים ממקור נתונים, כגון HDFS או מסד נתונים.
    מספר partition ב-RDD או DataFrame משפיע על עבודה מקבילית והביצועים של עבודת PySpark. אם מספר partition נמוך מדי, ייתכן שחלק מהשרתים יהיו פעילים בזמן שהם מחכים שאחרים ישלימו את עבודתם. אם מספר partition גבוה מדי, אז התקורה של ניהול המחיצות עשויה להפוך לצוואר בקבוק.

  17. מה ההבדל בין פונקציות map ל-flatMap ב-PySpark?
    פונקציות ()map ו-()flatMap ב- PySpark משמשות לטרנספורמציה RDDs על ידי שימוש פונקציה על כל אלמנט ב-RDD.
    פונקציית ()map מיישמת את הפונקציה על כל אלמנט ב-RDD ומחזירה RDD חדש עם אותו מספר אלמנטים. התוצאה של הפונקציה עטופה ב-RDD חדש.
    פונקציית ()flatMap מיישמת את הפונקציה על כל אלמנט ב-RDD, אך הפונקציה צריכה להחזיר איטרטור שמייצר אפס אלמנטים או יותר. האלמנטים המיוצרים על ידי האיטרטורים משטחים ל-RDD יחיד.
    לדוגמה:
    אם ברצוננו לפצל את השורות למילים בודדות, נוכל להשתמש בפונקציה ()map .
    מצד שני, אם אנחנו רוצים לייצר RDD שטוח של מילים בודדות, אנחנו יכולים להשתמש בפונקציה ()flatMap 
    לדוגמה:
				
					words_rdd = sc.parallelize(["Hello world", "I am learning PySpark"])

words_mapped = words_rdd.map(lambda line: line.split(" "))

# print words_mapped
[["Hello", "world"], ["I", "am", "learning", "PySpark"]]


words_flatmapped = words_rdd.flatMap(lambda line: line.split(" "))

# print words_flatmapped
["Hello", "world", "I", "am", "learning", "PySpark"]
				
			

 

שימו לב שהפונקציה ()flatMap מייצרת RDD שטוח של מילים בודדות, בעוד שהפונקציה ()map מייצרת RDD של רשימות. הפונקציה ()flatMap שימושית כאשר אנו רוצים לייצר RDD שטוח של אלמנטים בודדים, בעוד שהפונקציה ()map שימושית כאשר אנו רוצים לייצר RDD של רשימות או tuples.

 

אהבת את המאמר?

שיתוף ב facebook
שתף בפייסבוק
שיתוף ב twitter
שתף ב - Twitter
שיתוף ב linkedin
שתף ב- Linkdin
שיתוף ב whatsapp
שתף ב - Whatsapp

השאר תגובה

3.7 3 הצבעות
Article Rating
Subscribe
Notify of
guest
1 תגובה
Oldest
Newest Most Voted
Inline Feedbacks
הצג את כל התגובות
יוסי לוי

אהבתי

אולי יעניין אותך גם