Łukasz Bielak

Łukasz Bielak

Jak zbudować proces ETL w Azure Databricks?

Kiedy myślimy o ETLu w chmurze, pierwsze, co przychodzi na myśl, to usługa Azure Data Factory. Rzeczywiście – z jej pomocą można zbudować całkiem rozbudowane i stabilne procesy, zwłaszcza, że niedawno dodano funkcjonalność Mapping Data Flows. Jednak co, jeśli do wykonania transformacji potrzebna jest naprawdę duża moc obliczeniowa? Wtedy należy wspomóc się czymś bardziej wydajnym. Takim rozwiązaniem jest Apache Spark ukrywający się pod nazwą Azure Databricks.

Dlaczego warto korzystać z Azure Databricks?

Po pierwsze, nie zawsze musimy korzystać z Azure Databricks. Jeśli nasz system nie jest rozbudowany i nie potrzebujemy naprawdę dużej wydajności – Data Factory da sobie radę. Jednak w przypadku dużych zbiorów danych czy przetwarzania Big Data, warto rozważyć dołączenie usługi Databricks do architektury. Patrząc na aktualną propozycję Modern Data Warehouse przygotowaną przez Microsoft, to właśnie Databricks powinien być używany do transformacji danych.

Z punktu widzenia dewelopera ETL – usługa, o której mówimy daje bardzo duże możliwości. Główną jej zaletą jest możliwość pisania kodu do transformacji w różnych językach programowania, a także wykorzystania dodatkowych bibliotek. Z punktu widzenia Architekta, Databricks oferuje możliwości podłączenia się do wielu systemów, a także automatyczne skalowanie. Jeśli brakuje mocy, system automatycznie włączy dodatkowe maszyny w klastrze. Musimy tylko określić do jakiej liczby węzłów można się skalować. Jeśli chodzi o koszty, to można je estymować przy użyciu kalkulatora – wszystko zależy oczywiście od mocy jaką chcemy dysponować. Wygląda ciekawie?  

Ale czym właściwie jest ten cały Spark i Databricks?

Gdybyśmy chcieli podać definicję, Spark jest platformą do obliczeń rozproszonych. W praktyce oznacza to, że dane, które przetwarzamy na Sparku są odpowiednio dzielone i składowane na kilku węzłach w taki sposób, że umożliwiony jest wysoce równoległy odczyt i przetwarzanie. Brzmi podobnie do tego, co dzieje się na Azure Data Warehouse?

Aby jeszcze lepiej opisać mechanizm Sparka, oczywiście uproszczony, wyobraźmy sobie sytuacje w której wrzucamy 1 gigabajtowy plik na dysk. Teraz chcemy z niego wyciągnąć wszystkie rekordy, które mają w wartość 1 w kolumnie numer 2. Jak byśmy to zrobili? Właściwie nie ma innej opcji niż przejrzenie każdego rekordu i odłożenie go na jakiś stos. A co gdybyśmy taki plik podzielili na 4 części i przekazali zadanie 4 jednostkom przetwarzającym? Zadanie zostanie wykonane 4 razy szybciej. Taka w dużym uproszczeniu jest ideologia rozproszonych obliczeń. Dzięki temu możliwe jest przetwarzanie naprawdę dużych zbiorów danych. Co więcej, Spark pozwala pisać kod w kilku językach takich jak Python, R, Scala czy SQL.

Na podstawie Sparka powstał Databricks, który jest dostępny na platformach chmurowych takich jak Azure czy AWS. Jeśli posiadasz subskrypcję Azure to utworzenie klastra do ćwiczeń nie powinno być problemem, wszystko można dosyć łatwo wyklikać. Tworzenie rozwiązań w Azure Databricks opiera się głównie  na pisaniu notatników, w których znajduje się kod do wykonania, a także komentarze i nagłówki. Sprawia to, że kod źródłowy, który jest wykonywany, jest bardzo czytelny i dobrze opisany.

Przykładowy ETL - założenia

Skoro mamy już jakąś teoretyczną wiedzę, warto przejść do praktyki 🙂 Przygotujemy sobie proces do transformacji danych. Załóżmy, że chcemy wczytać dane z pliku CSV, zmienić pewne wartości i umieścić wszystko w bazie SQL Database. Do tego celu potrzebujemy:

  • Azure Data Lake Store Gen2 – na którym składować będziemy plik CSV;
  • Azure Databricks – może być najniższa konfiguracja klastra, tu będą wykonywane transformacje;
  • Azure SQL Database – tutaj załadujemy przetransformowane dane z pliku CSV;
  • Połączenie wszystkich elementów – czyli utworzenie SPN dla Azure Databricks i nadanie dostępu do Data Lake. Więcej o tym, jak to zrobić, znajdziecie tutaj;
  • Plik CSV (pobrany stąd);

To wszystko, możemy zabierać się za tworzenie notatnika.

Notatnik z transformacjami

Zacznijmy budowę procesu od załadowania pliku z Data Lake do DataFrame’a. DataFrame jest obiektem nieco podobnym to tabeli – na nim wykonujemy operacje na poszczególnych kolumnach, możemy go zapisać do tabeli lub do pliku. Nie będę tutaj dokładnie omawiał jak działają i czym są DataFrame’y, dlatego przyjmijmy, że są to po prostu zmienne, które zawierają dane.

A więc – ładujemy dane z pliku CSV, który znajduje się w ścieżce, pamiętając o zamontowaniu ADLS (punkt 4 powyżej). Zaznaczamy, że w pierwszym wierszu mamy nagłówek, a kolumny oddzielone są średnikami.

Po obejrzeniu struktury pliku załóżmy, że chcemy wykonać następujące transformacje:

  • Wybrać z pliku tylko 5 kolumn;
  • Uwzględnić tylko rekordy, w których nazwa zakładu nie jest pusta;
  • Dodać kolumnę z adresem, która będzie składała się z nazwy miejscowości, ulicy, numeru budynku i lokalu. Zwróćmy uwagę, że niektóre wartości w kolumnie „ulica” zaczynają się od frazy „ul.”. Nie chcemy takiej sytuacji, ponieważ w polu „ulica” ma znajdować się tylko jej nazwa. Z pomocą wyrażeń regularnych usuwamy frazę „ul.”.

Po wyświetleniu struktury widać, że nasze transformacje przebiegły poprawnie. Pole „adres” zostało dodane i wygląda tak, jak było to zamierzone. Tutaj uwaga – gdybyśmy zostawili frazę „ul.” w niektórych wierszach otrzymalibyśmy wyrażenie „ul. ul.”.  

Ostatnim krokiem jest zapisanie wyników do bazy i sprawdzenie czy zapis się powiódł. Do tego celu wykorzystane zostanie połączeni JDBC.

Jak widać, dane z pliku zostały przetransformowane i załadowane do bazy to znaczy, że nasz proces ETL zakończył się powodzeniem 🙂 Oczywiście należałoby go zautomatyzować. Do tego celu możemy wykorzystać na przykład Azure Data Factory. Znajdziemy tam komponent, który umożliwia uruchamianie Notatników Databricksowych.

Materiały

Gdybyście chcieli wypróbować Azure Databricks to serdecznie zapraszam na mojego GitHuba, gdzie udostępniam notatnik z kodem z dzisiejszego artykułu. Polecam też bardzo fajny, darmowy kurs (w całości po polsku) – „Azure Databricks od A do Z”. Więcej kursów można znaleźć na oficjalnej stronie Databricks

Udostępnij post

Share on facebook
Share on twitter
Share on linkedin
Share on print
Share on email

Pozostańmy w kontakcie

Jeżeli chcesz być na bieżąco informowany o nowych wpisach oraz dostawać materiały, których nie publikuję na blogu - zapisz się do newslettera!