Ερωτήσεις Συνέντευξης PySpark
Από Aaron Cao · Ενημερώθηκε

Οι συνεντεύξεις PySpark επικεντρώνονται στο μοντέλο εκτέλεσης και στην απόδοση. Περιμένετε να εξηγήσετε τη διαφορά transformation και action, να εντοπίσετε ποιες λειτουργίες προκαλούν shuffle, να επιλέξετε broadcast join, να διαγνώσετε data skew, να αιτιολογήσετε το caching και να περιγράψετε πώς θα ρυθμίζατε ένα job που εξαντλεί τη μνήμη.
Τι ρωτούν οι συνεντευκτές για το μοντέλο εκτέλεσης;
Μπορείτε να γράψετε λειτουργικό PySpark και να σκοντάψετε εδώ, γιατί αυτές οι ερωτήσεις αφορούν τι κάνει η μηχανή και όχι τι λέει ο κώδικάς σας. Οι συνεντευκτές ξεκινούν ακριβώς μ' αυτές γιατί ξεχωρίζουν όσους έχουν ρυθμίσει ένα job από όσους απλώς το έχουν τρέξει. Αυτή η ενότητα καλύπτει τις ερωτήσεις μοντέλου και τι περιλαμβάνει μια πλήρης απάντηση.
- Transformation ή action, ποια η διαφορά; Τα transformation χτίζουν ένα πλάνο και επιστρέφουν lazy ένα νέο DataFrame· action όπως
count,collectή μια εγγραφή ενεργοποιούν την εκτέλεση. Τίποτα δεν υπολογίζεται μέχρι να ζητήσει αποτέλεσμα ένα action. - Γιατί είναι χρήσιμο το laziness; Ο optimizer βλέπει ολόκληρη την αλυσίδα πριν την τρέξει, οπότε μπορεί να αναδιατάξει φίλτρα, να κόψει στήλες και να συνδυάσει βήματα.
- Narrow ή wide transformation; Οι narrow λειτουργίες όπως
filterκαιselectκρατούν κάθε partition εξόδου εξαρτημένη από ένα partition εισόδου. Οι wide λειτουργίες όπωςgroupBy,joinκαιdistinctαναδιανέμουν δεδομένα μεταξύ partitions, κάτι που είναι shuffle. - Τι είναι το shuffle και γιατί έχει σημασία; Τα δεδομένα κινούνται στο δίκτυο και αγγίζουν τον δίσκο, σχηματίζοντας όριο stage. Είναι συνήθως το πιο ακριβό πράγμα που κάνει ένα job.
- Εξηγήστε job, stage και task. Ένα action ξεκινά ένα job, τα όρια shuffle το χωρίζουν σε stages, και κάθε stage τρέχει ένα task ανά partition.
- RDD, DataFrame ή Dataset; Προτιμήστε DataFrame, γιατί εκεί ισχύουν ο optimizer Catalyst και η columnar εκτέλεση. Τα RDD παραμένουν για χαμηλού επιπέδου έλεγχο. Τα typed Dataset είναι έννοια JVM, οπότε στην Python η ειλικρινής απάντηση είναι ότι δεν ισχύουν.
Πείτε τις λέξεις shuffle και stage όταν ταιριάζουν στην απάντηση. Οι συνεντευκτές τις χρησιμοποιούν ως συντόμευση για το αν έχετε διαβάσει ποτέ ένα Spark UI.
Πώς απαντάτε στις ερωτήσεις απόδοσης;
Οι περισσότερες συνεντεύξεις PySpark για senior θέσεις είναι συνεντεύξεις απόδοσης. Οι ερωτήσεις έρχονται ως σενάρια, όχι ως ορισμοί.
- Ένα join είναι αργό. Τι ελέγχετε; Πρώτα το μέγεθος κάθε πλευράς. Αν η μία χωράει στη μνήμη του executor, κάντε της broadcast και αποφύγετε εντελώς το shuffle. Αλλιώς κοιτάξτε partitioning και skew πριν αγγίξετε το μέγεθος του cluster.
- Τι είναι το data skew και πώς το διορθώνετε; Λίγα key κρατούν τις περισσότερες γραμμές, οπότε ένα task τρέχει πολύ αφού τα υπόλοιπα έχουν τελειώσει. Οι λύσεις περιλαμβάνουν salting του hot key, broadcast της μικρής πλευράς, ή φιλτράρισμα null που όλα κάνουν hash στο ίδιο σημείο. Το διαγνωστικό σήμα είναι η διασπορά διάρκειας task στο Spark UI.
- Πότε κάνετε cache ή persist; Όταν ένα DataFrame ξαναχρησιμοποιείται σε πολλαπλά action και ο επανυπολογισμός θα ήταν ακριβός. Το caching κάτι που χρησιμοποιείται μία φορά σπαταλά μνήμη, και το unpersist έχει σημασία σε μακρά job.
- Repartition ή coalesce; Το repartition κάνει shuffle και μπορεί να αυξήσει ή να μειώσει partitions ομοιόμορφα· το coalesce συγχωνεύει χωρίς πλήρες shuffle, ο φθηνότερος τρόπος να μειώσετε τα αρχεία εξόδου.
- Γιατί να αποφύγετε ένα Python UDF; Οι γραμμές κάνουν serialize μεταξύ 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, οπότε κάθε null γραμμή έκανε hash στο ίδιο partition. Οι συνεντευκτές επιβραβεύουν αυτή τη σειρά: κοιτάξτε τα δεδομένα πριν το cluster.
Σχετικές τράπεζες ερωτήσεων ανά ρόλο βρίσκονται στο interview questions by role.
Ποιες πρακτικές ερωτήσεις και ερωτήσεις διαχείρισης δεδομένων εμφανίζονται;
Οι υπόλοιπες ερωτήσεις ελέγχουν αν έχετε παραδώσει ένα pipeline και όχι απλώς τελειώσει ένα tutorial.
- Πώς διαβάζετε δεδομένα αποδοτικά; Columnar μορφές όπως Parquet, partition pruning στη στήλη φίλτρου, και predicate pushdown. Εξηγήστε γιατί το να διαβάζετε λιγότερα bytes είναι καλύτερο από το να βελτιστοποιείτε τι συμβαίνει μετά.
- Γιατί να ορίσετε schema αντί να το αφήσετε να γίνει inferred; Το inference κοστίζει ένα επιπλέον πέρασμα στα δεδομένα και μπορεί να μαντεύει τύπους ασυνεπώς μεταξύ εκτελέσεων.
- Πώς χειρίζεστε null και διπλότυπα; Οι σχετικές συναρτήσεις, συν το ότι τα join key γεμάτα null δημιουργούν skew.
- Σε τι χρησιμεύουν τα window function; Κατάταξη, τρέχοντα σύνολα και deduplication στην πιο πρόσφατη εγγραφή ανά key, μια πολύ συνηθισμένη εργασία pipeline.
- Πώς γράφετε output χωρίς να παράγετε χιλιάδες μικρά αρχεία; Coalesce ή repartition πριν τη γραφή, και κάντε partition το output σε μια στήλη με λογική cardinality.
- Πώς δοκιμάζετε κώδικα PySpark; Μικρές τοπικές συνεδρίες με fixture DataFrame, και επιχειρησιακή λογική χωρισμένη σε συναρτήσεις που δέχονται και επιστρέφουν DataFrame.
- Πώς κάνετε submit και ρυθμίζετε ένα job; Αριθμός executor, πυρήνες και μνήμη, και το σκεπτικό ότι τόσο πολλοί μικροί executor όσο και πολύ λίγοι μεγάλοι σπαταλούν χωρητικότητα.
Πώς πρέπει να εξασκηθείτε πριν τη συνέντευξη;
Οι απαντήσεις PySpark αποτυγχάνουν φωναχτά με έναν αναγνωρίσιμο τρόπο. Ο υποψήφιος ξέρει ότι ένα shuffle είναι ακριβό αλλά δεν μπορεί να πει ποιες λειτουργίες το προκαλούν, οπότε η απάντηση γίνεται μια λίστα επιθέτων. Το να διαβάζετε μια τράπεζα ερωτήσεων παράγει αναγνώριση, και η αναγνώριση δεν είναι το ίδιο με μια εξήγηση που δίνεται ενώ κάποιος περιμένει.
Πάρτε ένα pipeline που έχετε φτιάξει και αφηγηθείτε το από την αρχή ως το τέλος: το read, κάθε transformation, πού πέφτουν τα όρια stage, και τι θα ελέγχατε πρώτο αν επιβράδυνε. Κάντε το φωναχτά μέχρι να σταματήσετε να ξεκινάτε ξανά. Το να εξασκείστε σε αυτές τις προτροπές απέναντι σε έναν AI συνεντευκτή που κάνει την επόμενη ερώτηση είναι πιο κοντά σε πραγματικό γύρο από το να ξαναδιαβάζετε σημειώσεις, και γι' αυτό φτιάχτηκε η λειτουργία mock interview.
Ο Aaron Cao, ιδρυτής της SubcueAI, έχτισε την εξάσκηση γύρω από αυτό το χάσμα ομιλίας αντί γύρω από την παροχή περισσότερων ερωτήσεων. Σε μια ζωντανή συνέντευξη, η εφαρμογή desktop και το Side Panel της επέκτασης browser μπορούν να αναδείξουν δομή καθώς μιλά ο συνεντευκτής, κάτι που βοηθά περισσότερο σε υλικό που έχετε ήδη εξασκήσει. Η ρύθμιση διαρκεί λίγα λεπτά και περιγράφεται στη σελίδα tutorial.
Συχνές ερωτήσεις
Οι συνεντεύξεις PySpark περιλαμβάνουν live coding;
Πόσο SQL χρειάζομαι για έναν ρόλο PySpark;
Πρέπει να μάθω Scala για συνέντευξη Spark;
Ποιο είναι το πιο συνηθισμένο λάθος σε συνέντευξη PySpark;
Μπορεί ένας βοηθός AI να με βοηθήσει σε ζωντανή συνέντευξη data engineering;
Σχετικές ερωτήσεις
- Τι είδους ερωτήσεις εμφανίζονται στις συνεντεύξεις προγραμματισμού και πώς μπορεί να βοηθήσει ένας βοηθός AI;
- Ποιες ερωτήσεις τίθενται σε μια βιντεοσυνέντευξη HireVue;
- Ποιες ερωτήσεις συνέντευξης για Databricks να περιμένω;
- Ποιες ερωτήσεις συνέντευξης .NET να περιμένω;
- Ποιες ερωτήσεις συνέντευξης μηχανικού ποιότητας να περιμένω;
- Τι ερωτήσεις να περιμένω σε μια quant συνέντευξη;