Databricks

Vad är Databricks?

Databricks är idag ett vanligt ”buzzword” inom Data Science. Genom Databricks kan man få snabbare beräkningar och svar. Det sker genom att exekveringen av koden fördelas på flera datorer (kluster), vilket därigenom kan ge ett bättre utnyttjande av tillgänglig datakraft i exempelvis molnet. I blogginlägget förklarar jag lite djupare vad Databricks är, vilka problem det löser och hur jag ser på utvecklingen inom området.

I vilka språk kan man använda Databricks?

Man pratar framförallt om tre stora programmeringsspråk när det kommer till Databricks, R, Scala och Python. I den här bloggen kommer jag använda mig av Python som exempel.

Låt mig förklara från början så att alla hänger med, oavsett bakgrund.

Python i sin allra enklaste form är ett program som vi endast kan använda via kommandotolk. Den svarta skärmen med vit text i bakgrunden visar exempel på detta, här ser vi en tidig version av Python:

I den här kommandotolken kan man använda Python i nästan vilket operativsystem som helst, (Windows, Linux, Unix, o.s.v.), Varje rad vi skriver på i kommandotolken får ett svar och man programmerar i en sekvens. Till exempel, om jag vill addera a+b där a=5 och b =2, hade det sett ut så här:

Enkelt, eller hur? So far so good. Notera att jag skrev “print a” för att visa vad variabeln “a” har för värde. Samma med print a+b. Python är enkelt!

Man kan också skriva ett stort program i en fil, så kallat skript, för att senare bara få ut outputen. Om vi fortsätter med exemplet ovan, vårt skript hade haft 5 rader och vi hade bara fått se 5, 2 och 7 som output. Varför? För att det är de här raderna som har en “print” framför sig.

Varför ska man skriva all kod i ett skript? Det är för att göra det enklare att köra ett program/skript flera gånger om. Det kommer med en nackdel dock. Problem uppstår om man har ett stort skript och vill testa ut olika delar av skriptet, eller helt enkelt debugga programmet. Då blir det svårt! Varför då?

Jo, det blir svårt att testa ut olika delar av skriptet. Det för att de variabler som vi inte skrev ut, försvinner när vårt skript har kört färdigt (se bilden nedan). Ibland, framförallt när man letar efter något fel i ett skript vill man behålla variablernas sista värde.

Nu till nästa del och det är något som kallas för IPython (eller kanske, iPython om det vore en Apple-produkt?) IPython står för Interactive Python. Det innebär att vi till exempel kan köra ett skript och behålla variablerna. Det låter inte så svårt eller hur? Det ser ut som kommandotolken men har det här som extra feature.  Vi kan upprepa samma exempel som förr och se om vi denna gång får ut, variabeln “a” och “b”.

Nedan ett exempel där jag kör samma skript som ovan med en “run” och nu får jag veta vad a och b hade för värde.

Nu har vi löst en del av problemet. Men blir det enklare att debugga ett stort skript? Nja! Nästa steg är då Jupyter och det är här allt blir mycket mer intressant.

Jupyter har ett mer grafisk gränssnitt och körs via en webbläsare. För att kunna använda Python på samma sätt som IPython. Det finns två intressanta skillnader mellan IPython och Jupyter. För det första introducerar man det vi kallar för “Notebooks” och för det andra, får man välja vilket språk (kernel) man vill använda för att köra en Notebook.

Låt oss kolla på “Kernel” närmare. En kernel är viktigt, det för att en kernel kommer kunna tolka olika instruktioner i ett visst programmering språk. Ja, du har gissat rätt! Det är därför den heter Jupyter: Julia-python-(e)r. Coolt eller hur? En Kernel måste man installera på sin dator så att man kan använda datorernas resurser.

Så vad är en Notebook då? Jo, en Notebook är en blandning mellan IPython och olika skripts. Man får olika rutor inom en Notebook där varje ruta blir som ett skript. Vi kan ha hur många rutor som helst i samma Notebook. Kanske har du redan listat ut att på varje ny ruta, behåller man variablerna från det skriptet man körde innan.  Så att på vårt nästa skript eller ruta använder samma variabler som man definierade innan. Nedan ser ni samma exempel som jag använt tidigare. Första rutan visar vårt skript, på den andra rutan använder jag “a” och “b” för en print i ett annat skript.

Se tre rutor i Jupyter här nedan:

Vad har allt detta att göra med Databricks? 

Bra fråga! Databricks är nästa steg i den här berättelsen. Som jag förklarade innan så installerar man en kernel som tolkar instruktioner eller commando som körs på datorn. Även om jag har olika tolkar på samma dator är det fortfarande bara samma dator.

Databricks ser i princip ut som en Jupyter Notebook och det fungerar på samma sätt. Man kan även kalla de för Notebooks. Dock kommer den med ett till feature! Kan du gissa vad det är?

Ja! Helt rätt, att kunna köra samma program eller skript på olika datorer. Så istället för att köra vår kod på bara en enda dator kan du nu köra den på olika “kluster”. Nu kallade jag precis datorer för kluster, men det var min avsikt. För med Databricks kan man skapa ett så kallat kluster som är en grupp av datorer. Samma kod, mer processorkraft, mindre tid för att invänta resultat.

Eftersom Databricks är kraftigare än Jupyter så har vi också andra “kernels”. Python, R och Scala.

Här nedan är det samma exempel på hur vårt skript skulle se ut med Databricks:

Varför vill man köra med flera datorer?

Det finns något som heter Apache Spark som distribuerar alla kommandon eller instruktioner mellan olika datorer. Apache Spark är den som ligger bakom kulisserna och exekverar alla instruktioner. Det kan låta som något enkelt men för att sätta upp ett kluster krävs mycket tid.

Men, varför Databricks och inte Jupyter? 

Databricks blev otroligt populärt när molntjänsterna tog fart. Man kan även använda Jupyter i olika molntjänster som Google GCP, Amazon AWS och Microsoft Azure, men Databricks har helt enkelt blivit mer känt just nu. Jupyter försöker komma ikapp med JupyterLabs, men det är en helt annan berättelse.

Viktigt att förstå är att man med molntjänster kan välja vilka datorer som helst, när vår kod ska köras. Detta betyder att man inte längre behöver köpa dyra prylar utan man betalar bara för körtiden. Det ger stora möjligheter till att kunna testa olika algoritmer, utföra data transformationer eller kraftiga beräkningar. Att installera sitt eget kluster som är så tidskrävande blir med hjälp av Databricks bara ett klick. (Se bilden nedan för exempel).

Vad är nästa steg efter Databricks?

Ja, det är en bra fråga. Jag kanske kommer påverka din åsikt, men i mina ögon så kommer vi att växa ifrån att välja att anpassa ett kluster efter våra behov. Låt mig förklara, just nu måste vi anpassa vårt kluster till den kod som vi ska exekvera. Det vill säga, kluster som är optimerade beroende på minne, processkraft, GPU och så vidare. Idag behöver man till och med vänta på att kluster ska komma igång, detta brukar ta några minuter.

Om jag spanar in i framtiden tror jag att stora kluster kommer vara uppe och redo för att exekvera kod. Det blir någon sorts smart abonnemangstjänst som vi alla kommer att använda oss av inom programmeringsvärlden. På det här sättet skickar man bara sin kod (krypterat så klart), och den exekveras på olika datorer runt om i världen. Den väljer rätt hårdvara för att optimera exekveringstiden av din kod.

Man kan till och med tänka sig att din dator inte kommer behöva någon hårdvara längre utan bara kan skicka instruktioner till de här stora klustren någonstans i molnet. Google har redan sitt OS tänkt på det här sättet. Nu gick jag händelserna lite i förväg, men det är spännande att  sia om framtiden! Vad tror du är framtiden när det kommer till Databricks?

Har du fortfarande fler frågor om Databricks eller vill du bara diskutera ämnet? Tveka inte att kontakta mig !
Luis Reina, luis.fernando.reina@advectas.se 

Vill du veta mer om affärsutveckling och verksamhetsoptimering med Data Science?

Läs vår broschyr ”Från BI till AI”.