Azure Databricks: Co se do meet-upu nevešlo

Poslední meet-up o Azure DataBricks se nám trochu zvrtnul v příjemný pokec na různá témata související s Databricks. Což bylo super! Stihli jsme pizzu, pivo i panáka. Nestihli jsme s Magdou ale zdaleka odprezentovat vše, co jsme chtěli. Tak proč aspoň něco z toho nehodit do blogu?

Prakticky jsme ukázali, že vytvořit si od nuly Databricks workspace a načíst do něj data je relativně brnkačka, trvá to chvíli, ke všemu je GUI a není to žádná věda. Ukazovali jsme si připojení storage accountů a data lake storage gen2, práci s notebooky, načtení dat, připojení na Power BI, atd.

Už jsme, ale nestihli ukázat (mimo jiné), jak pohodlně a jednoduše lze data čistit, transformovat a využít pro ML. Pojďme se dnes v rychlosti podívat alespoň na data cleansing.

Co běžně potřebujeme je odstranit nebo doplnit chybějící údaje, zbavit se duplicit, odstranit data, která jsou vyloženě špatně, příp. i aplikovat nějakou business logiku pro vyčištění dat.

Řekněme, že mám už načtený data frame customerCategoriesDF. Data sdílet nebudu, vy zkoušejte na svých datech, to je vždycky nejlepší 😊. Všechny příklady používají Scala.

Pojďme na to

Chci odstranit všechny řádky, které nemají CustomerCategoryID:

customerCategoriesDF
                  .na.drop(Seq(“CustomerCategoryID”))

Pokud chci nevyplněné hodnoty vyplnit nějakou výchozí hodnotou, stačí si nadefinovat mapování a použít ho:

var defaultValueMap = Map(
                   “CustomerCategoryName” -> “Unknown Category”
)
customerCategoriesDF
                  .na.fill(defaultValueMap)

Často je potřeba se zbavit duplicitních záznamů. Pokud jde o odstranění řádků, které jsou kompletně úplně stejné, stačí toto:

customerCategoriesDF.dropDuplicates()

To je vše. No není to krása? Často je ale potřeba brát v potaz jen konkrétní sloupec nebo sloupce. Takže pokud chci mít vždy jen jeden řádek s názvem kategorie a ostatní chci zahodit, stačí toto:

customerCategoriesDF.dropDuplicates(“CustomerCategoryName”)

Příklad pro business rule – řekněme, že chci jen kategorie, které obsahují min. dvě slova (tedy alespoň jednu mezeru):

customerCategoriesDF.filter($”CustomerCategoryName” like “% %”)

Všechny tyto operace lze „zřetězit“:

customerCategoriesCleansedDF = customerCategoriesDF

.na.fill(defaultValueMap) // use default values based on map created in previous step
.na.drop(Seq(“CustomerCategoryID”)) // drop if values these columns are empty
.filter($”CustomerCategoryName” like “% %”)
.dropDuplicates(“CustomerCategoryName”)
display(customerCategoriesCleansedDF)

A teď si představte, za kolika „čtverečky“ by byla logika v předchozím příkladu schovaná v SSIS nebo v ADF. Místo změti nesrozumitelného XML (SSIS) nebo JSONu (ADF) je toto krátký, přehledný, jednoduchý, srozumitelný a krásně verzovatlený kód.

No a víc se do blog postu nevejde. Takže už se můžete těšit na příští s názvem „Co se do blog postu nevešlo“.

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed

Menu