أسئلة مقابلة PySpark

بقلم Aaron Cao · آخر تحديث

أسئلة مقابلة PySpark
تتركز مقابلات PySpark على نموذج التنفيذ وعلى الأداء. توقع أن تشرح الفرق بين transformation وaction، وأن تحدد أي العمليات تسبب shuffle، وأن تختار broadcast join، وأن تشخص data skew، وأن تبرر استخدام caching، وأن تصف كيف تضبط job ينفد منه الذاكرة.

تتركز مقابلات PySpark على نموذج التنفيذ وعلى الأداء. توقع أن تشرح الفرق بين transformation وaction، وأن تحدد أي العمليات تسبب shuffle، وأن تختار broadcast join، وأن تشخص data skew، وأن تبرر استخدام caching، وأن تصف كيف تضبط job ينفد منه الذاكرة.

بماذا يسأل القائمون على المقابلة عن نموذج التنفيذ؟

يمكنك كتابة كود PySpark يعمل وتتعثر هنا رغم ذلك، لأن هذه الأسئلة تسأل عما يفعله المحرك لا عما يقوله كودك. يفتح القائمون على المقابلة بها تحديدا لأنها تفصل بين من ضبط job فعلا ومن شغله فقط. يغطي هذا القسم أسئلة النموذج وما تتضمنه الإجابة الكاملة.

  • transformation أم action، ما الفرق؟ تبني transformation خطة وتعيد DataFrame جديدا بشكل lazy؛ أما action مثل count أو collect أو عملية write فتشغل التنفيذ. لا يُحسب شيء حتى يطلب action نتيجة.
  • لماذا يفيد laziness؟ يرى optimizer السلسلة كاملة قبل تشغيلها، فيستطيع إعادة ترتيب الفلاتر وتقليم الأعمدة ودمج الخطوات.
  • تحويل narrow أم wide؟ عمليات narrow مثل filter وselect تُبقي كل partition ناتجة معتمدة على partition إدخال واحدة. عمليات wide مثل groupBy وjoin وdistinct تعيد توزيع البيانات بين partitions، وهذا هو shuffle.
  • ما shuffle ولماذا يهم؟ تنتقل البيانات عبر الشبكة وتلامس القرص، مكونة حدا بين stages. غالبا ما تكون أكثر ما يكلف job.
  • اشرح job وstage وtask. يبدأ action وظيفة job، وحدود shuffle تقسمها إلى stages، ويشغل كل stage task واحدا لكل partition.
  • RDD أم DataFrame أم Dataset؟ فضل DataFrame، لأن Catalyst optimizer والتنفيذ العمودي ينطبقان هناك. تبقى RDD للتحكم منخفض المستوى. Dataset المكتوبة النوع مفهوم خاص بـ JVM، فالإجابة الصادقة في Python أنها لا تنطبق.

انطق كلمتي shuffle وstage عندما تناسبان الإجابة. يستخدمهما القائمون على المقابلة كطريقة سريعة لمعرفة هل قرأت Spark UI من قبل.

كيف تجيب عن أسئلة الأداء؟

معظم مقابلات PySpark لمستوى senior هي مقابلات أداء. تصل الأسئلة كسيناريوهات لا كتعريفات.

  • join بطيء. ماذا تتحقق منه؟ حجم كل طرف أولا. إذا كان أحدهما يتسع في ذاكرة executor، اعمل له broadcast وتجنب shuffle تماما. وإلا فانظر إلى partitioning وskew قبل المساس بحجم الكلاستر.
  • ما data skew وكيف تصلحه؟ عدد قليل من key يحتفظ بمعظم الصفوف، فيعمل task واحد طويلا بعد انتهاء البقية. تشمل الحلول salting للـ hot key، أو broadcast للطرف الصغير، أو تصفية قيم null التي تُجزأ hash كلها إلى نفس المكان. الإشارة التشخيصية هي تشتت مدة task في Spark UI.
  • متى تعمل cache أو persist؟ عندما يعاد استخدام DataFrame عبر عدة action وتكون إعادة الحساب مكلفة. عمل cache لشيء يُستخدم مرة واحدة يهدر الذاكرة، وunpersist مهم في jobs الطويلة.
  • repartition أم coalesce؟ repartition يعمل shuffle ويمكنه زيادة أو تقليل partitions بالتساوي؛ أما coalesce فيدمج دون shuffle كامل، وهي الطريقة الأرخص لتقليل ملفات الإخراج.
  • لماذا تتجنب UDF بلغة Python؟ تُسلسل الصفوف بين JVM وعملية Python، ولا يرى optimizer داخل الدالة. فضل الدوال built-in، ولا تلجأ إلى vectorized UDF إلا حين لا توجد دالة built-in.
  • لماذا يُعد collect خطيرا؟ يسحب النتيجة كاملة إلى driver وقد يستنفد ذاكرته.
  • فشل job بخطأ out of memory. ما ترتيب تحقيقك؟ هل هو driver أم executor، ثم skew، ثم حجم partition، ثم إعدادات الذاكرة. رفع الذاكرة كخطوة أولى إجابة تدل على قلة الخبرة.

سُئل data engineer كان يجري مقابلة لفريق platform لماذا استغرقت job ليلية كانت تعمل منذ سنة أربع ساعات فجأة. لم تكن الإجابة الصحيحة تغييرا في الإعدادات، بل أن شريكا upstream بدأ بإرسال قيم null في join key، فتحول كل صف null بنفس hash إلى partition واحدة. يكافئ القائمون على المقابلة هذا الترتيب: انظر إلى البيانات قبل الكلاستر.

توجد بنوك أسئلة ذات صلة حسب الدور تحت interview questions by role.

ما الأسئلة العملية وأسئلة معالجة البيانات التي تظهر؟

تتحقق الأسئلة المتبقية مما إذا كنت قد أطلقت pipeline فعلا وليس فقط أنهيت tutorial.

  • كيف تقرأ البيانات بكفاءة؟ صيغ عمودية مثل Parquet، وpartition pruning على عمود الفلتر، وpredicate pushdown. اشرح لماذا قراءة بايتات أقل أفضل من تحسين ما يحدث بعد ذلك.
  • لماذا تعرّف schema بدلا من ترك النظام يستنتجه؟ يكلف الاستنتاج مرورا إضافيا على البيانات وقد يخمن الأنواع بشكل غير متسق بين عمليات التشغيل.
  • كيف تتعامل مع قيم null والتكرارات؟ الدوال ذات الصلة، إضافة إلى أن join key المليء بقيم null يخلق skew.
  • لماذا تُستخدم window function؟ الترتيب والمجاميع التراكمية وإزالة التكرار للوصول إلى أحدث سجل لكل key، وهي مهمة شائعة جدا في pipeline.
  • كيف تكتب الإخراج دون إنتاج آلاف الملفات الصغيرة؟ coalesce أو repartition قبل الكتابة، وتقسيم الإخراج partition حسب عمود ذي cardinality معقولة.
  • كيف تختبر كود PySpark؟ جلسات محلية صغيرة مع DataFrame تجريبية، ومنطق العمل مقسم إلى دوال تستقبل وتعيد DataFrame.
  • كيف ترسل وتضبط job؟ عدد executor والأنوية والذاكرة، والمنطق القائل إن كثرة executor الصغيرة وقلة الكبيرة كليهما يهدر السعة.

كيف يجب أن تتدرب قبل المقابلة؟

تفشل إجابات PySpark بصوت عال بطريقة يمكن التعرف عليها. يعرف المرشح أن shuffle مكلف لكنه لا يستطيع تحديد أي العمليات تسببه، فتتحول الإجابة إلى قائمة صفات. قراءة بنك أسئلة تنتج تعرفا، والتعرف ليس نفس الشرح الذي يُقدم بينما ينتظر شخص ما.

خذ pipeline واحدا بنيته واسرده من البداية إلى النهاية: القراءة، وكل transformation، وأين تقع حدود stage، وما الذي ستتحقق منه أولا إذا تباطأ. افعل ذلك بصوت عال حتى تتوقف عن إعادة البدء. تمرين هذه المطالبات أمام مقابل AI يطرح سؤال المتابعة أقرب إلى جولة حقيقية من إعادة قراءة الملاحظات، ولهذا بُني وضع mock interview.

بنى Aaron Cao، مؤسس SubcueAI، التدريب حول فجوة الكلام هذه بدلا من توفير المزيد من الأسئلة. في مقابلة مباشرة، يمكن لتطبيق سطح المكتب وSide Panel في إضافة المتصفح إظهار البنية بينما يتحدث القائم على المقابلة، ما يساعد أكثر في المادة التي تدربت عليها بالفعل. يستغرق الإعداد بضع دقائق وموصوف في صفحة tutorial.

الأسئلة الشائعة

هل تتضمن مقابلات PySpark كتابة كود مباشرة؟

غالبا نعم. المهمة الشائعة هي join مع aggregation، أو إزالة التكرار للوصول إلى أحدث صف لكل key باستخدام window function. يراقب القائمون على المقابلة هل تلجأ إلى الدوال built-in بدلا من UDF، وهل تذكر partitioning دون أن يُطلب منك.

كم من SQL أحتاج لدور PySpark؟

الكثير. يعبر Spark SQL وDataFrame API عن العمليات نفسها، وتكتب فرق كثيرة join وwindow function مباشرة في SQL. توقع سؤالا واحدا على الأقل يمكنك الإجابة عنه بأي من الشكلين.

هل يجب أن أتعلم Scala لمقابلة Spark؟

ليس لدور PySpark. يساعد أن تعرف أن Spark يعمل على JVM وأن UDF بلغة Python يدفع تكلفة serialization عبر تلك الحدود، وهذا بالضبط سبب تفضيل الدوال built-in.

ما أكثر خطأ شائع في مقابلة PySpark؟

الإجابة عن أسئلة الأداء بحجم الكلاستر. يريد القائمون على المقابلة فحص البيانات أولا: أحجام partition، وskew، واستراتيجية join، وكمية ما يُقرأ. إضافة executor كخطوة أولى تدل على خبرة إنتاج محدودة.

هل يمكن لمساعد AI أن يساعدني خلال مقابلة data engineering مباشرة؟

يمكنه إظهار البنية بينما يتحدث القائم على المقابلة، وهو الأكثر فائدة في المادة التي تعرفها بالفعل. لا يحل محل التدريب، وتبقى مشاركة الشاشة والجلسات المسجلة والاختبارات المراقبة وأجهزة اللابتوب التي تديرها الشركة خارج النطاق.

أسئلة ذات صلة

← المزيد عن أسئلة المقابلات حسب الدور والموضوع