Zadanie DÚ1
Vašou úlohou je prepísať ETL pipeline DIM_PRODUCT z Apache Hop do Jupyter notebooku v PySparku.
Vstup
etl_example_hw1.zip
Pipeline obsahuje oproti príkladu z prednášky niekoľko transformácií navyše z dôvodu:
- generovania výstupu do CSV súboru namiesto DB,
- extrakcie číselníka produktov zo vstupnej tabuľky
CB_LOAN_CONTRACTS.
Môžete predpokladať, že:
- Pre jedno
master_product_id existuje v každom zdrojovom systéme maximálne jeden namapovaný produkt.
- V tabuľke
CB_LOAN_CONTRACTS majú všetky riadky s rovnakým CB_PRODUCT_CODE rovnakú hodnotu CB_PRODUCT_DESC.
- Kľúče používané na vyhľadávanie produktov v tabuľkách
CRM_PRODUCT a LOS_PRODUCT sú jednoznačné.
Medzivýstup pipeline po vykonaní konkrétnej transformácie si viete pozrieť kliknutím na jej ikonu a zvolením možnosti "Preview & debug output", a následne "Quick Launch".
Zadanie
- Každú transformáciu v Hop pipeline implementujte v samostatnej bunke notebooku.
- Každá bunka musí vytvoriť a vypísať DataFrame zodpovedajúci medzivýstupu príslušnej Hop transformácie vrátane jeho schémy. Použite
show() a printSchema().
- Vyžaduje sa zhoda medzivýstupov aj finálneho výstupu v názvoch a poradí stĺpcov, dátových typoch, počte a obsahu riadkov.
- Používajte výlučne PySpark DataFrame API. Nepoužívajte RDD, Spark SQL ani používateľské funkcie (UDF).
- V rámci jednej bunky môžete použiť viacero operácií DataFrame API, ak sú potrebné na implementáciu príslušnej Hop transformácie.
- Je možné, že budete potrebovať použiť metódy DataFrame API, ktoré sme nespomínali na cvičeniach.
- PySpark kód píšte efektívne: obmedzujte drahé operácie vyžadujúce shuffle a eliminujte nepotrebné operácie, pričom zachovajte požadovanú zhodu medzivýstupov.
- Výsledný DataFrame
DIM_PRODUCT vypíšte na výstup, neukladajte ho do súboru. Vypíšte aj jeho schému.
Riešenie pošlite e-mailom na
do 26.11.2026 23:59:59. Ako predmet e-mailu uveďte „VTAD HW1“. E-mail musí obsahovať:
- súbor
{priezvisko}_hw1.ipynb s riešením v PySparku podľa uvedených inštrukcií,
- uveďte a detailne odôvodnite aspoň tri možnosti optimalizácie výsledného PySpark riešenia, ak by nebola požadovaná podmienka jednej Hop transformácie na bunku a zhoda medzivýstupov. Pri každej možnosti presne opíšte navrhovanú zmenu kódu a vysvetlite, akú úsporu resourcov a / alebo času vykonávania v Sparku by sme dosiahli.
Pri diskusii vychádzajte zo sémantiky Hop transformácií a zodpovedajúcich DataFrame operácií v Sparku.