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

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit /  Bijwerken )

Google photo

Je reageert onder je Google account. Log uit /  Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit /  Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit /  Bijwerken )

Verbinden met %s

Deze site gebruikt Akismet om spam te bestrijden. Ontdek hoe de data van je reactie verwerkt wordt.

%d bloggers liken dit: