Pytania Rekrutacyjne PySpark

Autor: Aaron Cao · Zaktualizowano

Pytania Rekrutacyjne PySpark
Rozmowy o PySpark koncentrują się na modelu wykonania i na wydajności. Spodziewaj się wyjaśnienia różnicy między transformation a action, wskazania, które operacje powodują shuffle, wyboru broadcast join, zdiagnozowania data skew, uzasadnienia cache'owania oraz opisania, jak dostroiłbyś job, któremu kończy się pamięć.

Rozmowy o PySpark koncentrują się na modelu wykonania i na wydajności. Spodziewaj się wyjaśnienia różnicy między transformation a action, wskazania, które operacje powodują shuffle, wyboru broadcast join, zdiagnozowania data skew, uzasadnienia cache'owania oraz opisania, jak dostroiłbyś job, któremu kończy się pamięć.

O co pytają rekruterzy w kwestii modelu wykonania?

Można pisać działający PySpark i mimo to potknąć się tutaj, ponieważ te pytania dotyczą tego, co robi silnik, a nie tego, co mówi twój kod. Rekruterzy zaczynają właśnie od nich, bo odróżniają osoby, które dostrajały joba, od tych, które tylko go uruchomiły. Ta sekcja omawia pytania o model oraz to, co obejmuje pełna odpowiedź.

  • Transformation czy action, jaka jest różnica? Transformation buduje plan i leniwie zwraca nowy DataFrame; action, jak count, collect czy zapis, uruchamia wykonanie. Nic się nie liczy, dopóki action nie poprosi o wynik.
  • Dlaczego lazy jest przydatne? Optimizer widzi cały łańcuch przed jego uruchomieniem, więc może przestawić filtry, przyciąć kolumny i połączyć kroki.
  • Transformation narrow czy wide? Operacje narrow, jak filter i select, sprawiają, że każda partycja wyjściowa zależy od jednej partycji wejściowej. Operacje wide, jak groupBy, join i distinct, redystrybuują dane między partycjami, co jest shuffle'em.
  • Czym jest shuffle i dlaczego ma znaczenie? Dane przemieszczają się przez sieć i trafiają na dysk, tworząc granicę stage'a. To zwykle najkosztowniejsza rzecz, jaką robi job.
  • Wyjaśnij job, stage i task. Action rozpoczyna job, granice shuffle dzielą go na stage'e, a każdy stage uruchamia jeden task na partycję.
  • RDD, DataFrame czy Dataset? Preferuj DataFrame, ponieważ obowiązuje tam optimizer Catalyst i wykonanie kolumnowe. RDD pozostają do kontroli niskopoziomowej. Typowane Dataset to koncepcja JVM, więc w Pythonie uczciwa odpowiedź brzmi, że się nie stosują.

Wypowiadaj słowa shuffle i stage, gdy pasują do odpowiedzi. Rekruterzy traktują je jako skrót do sprawdzenia, czy czytałeś kiedyś Spark UI.

Jak odpowiadać na pytania o wydajność?

Większość rozmów o PySpark na poziomie senior to rozmowy o wydajności. Pytania przychodzą jako scenariusze, nie definicje.

  • Join jest wolny. Co sprawdzasz? Najpierw rozmiar każdej strony. Jeśli jedna mieści się w pamięci executora, zrób jej broadcast i całkowicie pomiń shuffle. W przeciwnym razie sprawdź partitioning i skew, zanim ruszysz rozmiar klastra.
  • Czym jest data skew i jak to naprawić? Kilka key trzyma większość wierszy, więc jeden task działa długo po tym, jak reszta skończy. Rozwiązania obejmują salting hot key, broadcast mniejszej strony lub odfiltrowanie null-i, które wszystkie trafiają do tego samego hasha. Sygnałem diagnostycznym jest rozrzut czasu trwania tasków w Spark UI.
  • Kiedy robisz cache lub persist? Gdy DataFrame jest wielokrotnie używany w różnych action, a ponowne przeliczenie byłoby kosztowne. Cache'owanie czegoś użytego raz marnuje pamięć, a unpersist ma znaczenie w długich jobach.
  • Repartition czy coalesce? Repartition shuffluje i może równomiernie zwiększyć lub zmniejszyć liczbę partycji; coalesce łączy bez pełnego shuffle, co jest tańszym sposobem na zmniejszenie liczby plików wyjściowych.
  • Dlaczego unikać UDF w Pythonie? Wiersze są serializowane między JVM a procesem Pythona, a optimizer nie widzi wnętrza funkcji. Preferuj wbudowane funkcje, a po vectorized UDF sięgaj tylko wtedy, gdy nie ma wbudowanej.
  • Dlaczego collect jest niebezpieczny? Ściąga cały wynik do drivera i może wyczerpać jego pamięć.
  • Job kończy się błędem out of memory. Jaka jest kolejność twojego dochodzenia? Czy to driver czy executor, potem skew, potem rozmiar partycji, potem konfiguracja pamięci. Zwiększenie pamięci jako pierwszy krok to odpowiedź sygnalizująca brak doświadczenia.

Inżyniera danych, który rekrutował się do zespołu platformowego, zapytano, dlaczego nocny job działający od roku nagle zaczął trwać cztery godziny. Trafną odpowiedzią nie była zmiana konfiguracji, lecz to, że jeden partner upstream zaczął wysyłać nulle w kluczu join, więc każdy null-owy wiersz trafiał hashem do jednej partycji. Rekruterzy nagradzają tę kolejność: spójrz na dane, zanim spojrzysz na klaster.

Powiązane bazy pytań według roli znajdują się pod interview questions by role.

Jakie praktyczne pytania i pytania o przetwarzanie danych się pojawiają?

Pozostałe pytania sprawdzają, czy wdrożyłeś pipeline, a nie tylko skończyłeś tutorial.

  • Jak efektywnie czytać dane? Formaty kolumnowe jak Parquet, partition pruning na kolumnie filtra i predicate pushdown. Wyjaśnij, dlaczego czytanie mniejszej liczby bajtów jest lepsze niż optymalizowanie tego, co dzieje się później.
  • Dlaczego definiować schemat zamiast go wnioskować? Wnioskowanie kosztuje dodatkowe przejście po danych i może w niespójny sposób zgadywać typy między uruchomieniami.
  • Jak radzisz sobie z nullami i duplikatami? Odpowiednie funkcje, plus to, że klucze join pełne nulli tworzą skew.
  • Do czego służą window function? Ranking, sumy narastające i deduplikacja do najnowszego rekordu na klucz, bardzo częste zadanie w pipeline.
  • Jak zapisać wynik bez tworzenia tysięcy małych plików? Coalesce lub repartition przed zapisem oraz partycjonowanie wyniku po kolumnie o rozsądnej kardynalności.
  • Jak testujesz kod PySpark? Małe lokalne sesje z fixture'owymi DataFrame oraz logika biznesowa rozłożona na funkcje przyjmujące i zwracające DataFrame.
  • Jak zgłaszasz i konfigurujesz joba? Liczba executorów, rdzenie i pamięć oraz argumentacja, że zarówno zbyt wiele małych executorów, jak i zbyt mało dużych, marnuje pojemność.

Jak ćwiczyć przed rozmową?

Odpowiedzi PySpark zawodzą na głos w rozpoznawalny sposób. Kandydat wie, że shuffle jest kosztowny, ale nie potrafi powiedzieć, które operacje go powodują, więc odpowiedź zamienia się w listę przymiotników. Czytanie bazy pytań daje rozpoznawanie, a rozpoznawanie to nie to samo co wyjaśnienie podane, gdy ktoś czeka.

Weź jeden pipeline, który zbudowałeś, i opowiedz go od początku do końca: odczyt, każdą transformation, gdzie wypadają granice stage'i i co sprawdziłbyś najpierw, gdyby zwolnił. Rób to na głos, aż przestaniesz zaczynać od nowa. Ćwiczenie tych podpowiedzi na AI rekruterze, który zadaje pytanie dodatkowe, jest bliższe prawdziwej rundzie niż ponowne czytanie notatek, i do tego właśnie służy tryb mock interview.

Aaron Cao, założyciel SubcueAI, zbudował ćwiczenie wokół tej luki w mówieniu, a nie wokół dostarczania kolejnych pytań. Podczas rozmowy na żywo aplikacja desktopowa i Side Panel rozszerzenia przeglądarki mogą pokazywać strukturę, gdy mówi rekruter, co pomaga najbardziej przy materiale, który już przećwiczyłeś. Konfiguracja zajmuje kilka minut i jest opisana na stronie tutorial.

FAQ

Czy rozmowy o PySpark obejmują live coding?

Często. Typowym zadaniem jest join plus agregacja albo deduplikacja do najnowszego wiersza na klucz za pomocą window function. Rekruterzy obserwują, czy sięgasz po funkcje wbudowane zamiast UDF i czy wspominasz o partitioningu bez podpowiedzi.

Ile SQL potrzebuję na stanowisko PySpark?

Sporo. Spark SQL i DataFrame API wyrażają te same operacje, a wiele zespołów pisze joiny i window function bezpośrednio w SQL. Spodziewaj się co najmniej jednego pytania, na które możesz odpowiedzieć w obu formach.

Czy powinienem nauczyć się Scali na rozmowę o Spark?

Nie na stanowisko PySpark. Pomaga wiedzieć, że Spark działa na JVM i że UDF w Pythonie płacą koszt serializacji na tej granicy, dlatego właśnie preferowane są funkcje wbudowane.

Jaki jest najczęstszy błąd na rozmowie o PySpark?

Odpowiadanie na pytania o wydajność rozmiarem klastra. Rekruterzy chcą, aby najpierw zbadano dane: rozmiary partycji, skew, strategię join i ile jest czytane. Dodanie executorów jako pierwszy ruch sygnalizuje ograniczone doświadczenie produkcyjne.

Czy asystent AI może pomóc mi podczas rozmowy o data engineering na żywo?

Może pokazać strukturę, gdy mówi rekruter, co jest najbardziej przydatne przy materiale, który już znasz. Nie zastępuje ćwiczeń, a udostępnianie ekranu, nagrywane sesje, testy z proctoringiem i laptopy zarządzane przez firmę pozostają poza zakresem.

Powiązane pytania

← Więcej o Pytania rekrutacyjne według roli i tematu