SparklyR – Grote datasets (of Big Data) analyseren met Spark en R
Intro
Een aantal weken geleden heeft RStudio het R package SparklyR uitgebracht. Dit package maakt het mogelijk om op een eenvoudige manier grote datasets, of zelfs data hoeveelheden onder de noemer Big Data, met R te analyseren met behulp van de technologie van Apache Spark. In dit artikel wil ik dat met een voorbeeld demonstreren. Hier heb ik een dataset van de RDW gebruikt waarin alle geregistreerde personenauto’s staan opgeslagen, een bestand dat bestaat uit een aantal miljoenen regels.
De RDW-dataset
De website van de RDW bevat mooie datasets waarmee je fantastische analyses kunt uitvoeren. De dataset die ik voor dit artikel gebruik, is de dataset alleen_personenauto. Deze dataset bevat over alle geregistreerde auto’s/kentekens in Nederland verschillende gegevens. Dit zijn gegevens zoals:
- Merk en model (handelsbenaming);
- Datum tenaamstelling;
- Carrosserie (inrichting);
- Kleur;
- Catalogusprijs.
In dit artikel zal ik een kleine greep doen van de vrij basale analyses die je met Spark en R op deze dataset kunt doen.
Apache Spark
Apache Spark is de laatste jaren opgekomen als technologie om grote hoeveelheden data te analyseren. De software is open source en kan op verschillende platformen worden gebruikt. Zo kun je Spark installeren op een Hadoop cluster of gewoon lokaal draaien op je eigen laptop. Daarbij is het ook mogelijk om een Spark cluster in de cloud aan te maken. Voor dit artikel is er voor de tweede methode gekozen, Spark lokaal draaien.
Data analyseren met Spark kan in de talen Scala, Python en R. Hierbij zijn Scala en Python de voornaamste talen om te gebruiken met Spark. Data analyseren met Spark kan ook prima in R. De makers van Apache Spark hebben een uitstekende frontend gemaakt om R te programmeren op Spark. Daarbij kun je vanuit R en RStudio ook gebruik maken van het RSpark package. Echter is er nu een methode die het nog veel eenvoudiger maakt en veel fijner werkt, het SparklyR package.
SparklyR
De helden van RStudio hebben een package geschreven waarbij je met R eenvoudig gebruik kan maken van Spark en op een uitstekende manier grote hoeveelheden data kan analyseren. Er wordt namelijk gebruik gemaakt van de methodiek zoals we die van het dplyr package kennen. Op deze manier kun je ongestoord data analyseren met R en dplyr zoals je dat gewend bent, maar dan op grote hoeveelheden data door middel van de Spark technologie.
De voordelen
De combinatie van de data analyse mogelijkheden van R, de kracht van Apache Spark en de handige syntax van dplyr zorgen ervoor dat je een zeer sterk wapen voor uitgebreide data analyse op grote datasets in handen hebt. De mogelijkheden voor data analyse zijn eindeloos door de flexibiliteit van R en de vele packages die er voor beschikbaar zijn. Ook voor de hoeveelheden data hoef je niet verlegen komen te staan. Naast het lokaal draaien van Spark, kun je ook een Spark cluster in de cloud aanmaken en deze gebruiken voor sparklyR. Dit kan je bijvoorbeeld doen door op Microsoft Azure een Spark Cluster aan te maken.
Het is daarna eenvoudig om een verbinding te maken met deze Spark cluster. De laatste update van RStudio heeft namelijk een interface voor Spark clusters.
Demonstratie: Een basic analyse op de geregistreerde auto’s in Nederland
We beginnen met het openen van de benodigde packages:
library(data.table) library(dplyr) library(dtplyr) library(sparklyr) library(ggplot2) library(DBI)
De dataset van de RDW is gedownload als .csv. Aangezien dit een flink bestand is (1.6 GB op mijn schijf), maak ik gebruik van het data table package in R. Dit is een package die sterk is in het importeren en analyseren van grote tekstbestanden. Ik gebruik de fread() functie om de data in te lezen. Dit duurt bij mij een minuutje of 5.
autos.nederland
Nu is het tijd om de functies van het sparklyR package te gebruiken. Mocht je Apache Spark nog niet op je machine hebben geinstalleerd, gebruik dan de volgende functie:
spark_install(version = "1.6.2")
Spark installeren is nog nooit zo makkelijk geweest! Als Spark eenmaal geinstalleerd is, kunnen we deze verbinden met de R sessie:
sc "local")
De dataset wordt geladen naar Spark.
start endend - start
# print(spark_load_time)
Time difference of 4.568555 mins: Het duurde bij mij 5 minuutjes om de data in te laden.
We checken of de dataset succesvol in Spark is ingeladen:
src_tbls(sc) [1] autos_tbl
Populairste automerken
We maken nu een dataset en visualisatie die het aantal geregistreerde auto’s per merk weergeeft. We gebruiken de dplyr functies om de data samen te stellen en ggplot2 om de data te visualiseren.
# dataset samenstellen en filteren op merken die meer dan 100 keer voor komen
auto_merken %
group_by(Merk) %>%
summarise(aantal = n()) %>%
filter(aantal > 100) %>%
arrange(aantal, desc(-aantal))
# een R data frame maken van de dataset
auto_merken_df # Laat 25 meest geregistreerde automerken in Nederland zien
head(auto_merken_df, 25)
Merk Aantal
VOLKSWAGEN 662953
OPEL 537336
PEUGEOT 511589
RENAULT 483441
FORD 445847
TOYOTA 405040
CITROEN 286678
VOLVO 263035
FIAT 244923
MERCEDES-BENZ 232590
BMW 226046
AUDI 192856
SUZUKI 191248
HYUNDAI 175651
KIA 156817
NISSAN 156654
SEAT 152164
SKODA 118197
MAZDA 111050
MITSUBISHI 104785
HONDA 64320
CHEVROLET 57601
DAIHATSU 54825
MINI 48001
ALFA ROMEO 46671
# Het resultaat visualiseren met ggplot
autos_merk_plot 25), geom="bar", weight=Aantal, ylab="aantal") + theme(axis.text.x = element_text(angle = 90, hjust = 1))
autos_merk_plot
Populairste typen auto’s
Hetzelfde kunnen we doen voor de carrosserie:
# de dataset samenstellen met dplyr
auto_carrosserie %
group_by(inrichting) %>%
summarise(aantal = n()) %>%
filter(aantal > 100) %>%
arrange(aantal, desc(-aantal))
# een R data frame maken van de dataset
auto_carrosserie_df as.data.frame(auto_carrosserie)
# de data visualiseren met ggplot
autos_carrosserie_plot 50), geom="bar", weight=aantal, ylab="aantal") + theme(axis.text.x = element_text(angle = 90, hjust = 1))
SQL gebruiken om data te importeren
Ook kun je SQL methoden gebruiken om de data te importeren. Dit komt doordat we ook gebruik maken van het DBI package. We selecteren bijvoorbeeld alle Jaguars uit de dataset:
# een SQL query schrijven op de 'autosnederland' dataset
jaguars "SELECT * FROM autosnederland where Merk LIKE 'JAGUAR'")
# de eerste 10 rijen en kolommen van de dataset laten zien
head(jaguars[,1:4])
Kenteken Voertuigsoort Merk Handelsbenaming
1 LBFG76 Personenauto JAGUAR XJR 4.0 SUPERCHARGER
2 56XFPR Personenauto JAGUAR X-TYPE 2.5 V6
3 NP26GG Personenauto JAGUAR SOVEREIGN HE
4 TPRP75 Personenauto JAGUAR JAGUAR XK8 CONVERTIBLE
5 GZLJ37 Personenauto JAGUAR XJ-SC V12
6 68SXSN Personenauto JAGUAR X-TYPE 2.2D I4
Slot
SparklyR is een uitstekende manier om analyses te doen op grotere datasets. In dit artikel staan daar slechts vrij simpele voorbeelden van. Daarbij heb ik nog niet eens de mogelijkheid gebruikt om voorspellingsmodellen toe te passen met sparklyR, dan wordt het namelijk pas echt interessant.
In ieder geval zorgt dit fantastische package ervoor dat de uitgebreide mogelijkheden van R om data te analyseren gewoon keurig netjes doorgaan bij grotere datasets door gebruik te maken van Apache Spark. Probeer het eens uit met deze dataset door bijvoorbeeld op basis van de kentekens alle auto’s uit je straat te selecteren en opzoeken wie er binnenkort toe is aan een APK.
Geef een reactie