Spark SQL és MLLib

Összefoglalás

Ez az olvasólecke gyakorlati tudást nyújt a Spark SQL és az MLLib modulok használatáról. Részletesen foglalkozunk a Spark által nyújtott SQL lekérdezési funkciókkal, azok Scala és Python API-n keresztül történő elérésével. Áttekintjuk a gépi tanuláshoz használható MLLib modulok főbb osztályait, és egy konkért gépi tanulási feladaton keresztül áttekintjük az egyes fázisokhoz adott Spark támogatást (pl. feature előállítás, normalizálás, modell tanítás, kiértékelés).
A lecke fejezetei:
  • 1. fejezet: A Spark SQL API ismertetése, Scala és Python API-k bemutatása példákon keresztül (olvasó)
  • 2. fejezet: A Spark MLLib bemutatása egy összetettebb példa Python-ban történő megoldásán keresztül (olvasó)
Téma típusa: gyakorlati
Olvasási idő: 40 perc

Book to read, knowledge, lecture, open book, reading book icon 1. fejezet

Spark SQL API

A Spark részét képezi a Spark SQL modul [1], ami a strukturált adatfeldolgozást támogatja. A Spark SQL integrálja a relációs adat feldolgozást a Spark funkcionális programozási modelljével. Több féle adatforrást is támogat, és az SQL-ben megfogalmazott lekérdezéseket Spark transzformációkká és akciókká alakítja. A klasszikus RDD API-hoz képest a Spark SQL sokkal több információt tartalmaz mind az adatok, mind pedig a rajtuk végzendő műveletek struktúrájáról, amit a Spark végrehajtáskor hatékonyan ki tud használni a végrehajtás optimalizálásához. Az SQL utasítások végrehajtásához a spark.sql modul használható Scala, Java, R és Python nyelveken is.

Scala/Java

Első példaként töltsük be (lkoálisan a spark-master gépről vagy HDFS-ről) a 2g_BigData-data-transform-SPOC olvasóleckében bemutatott JSON fájlt (code/2g_BigData-data-transform-SPOC/source/personal_entries.json), és végezzünk SQL lekérdezéseket rajta spark-shell segítségével (Scala API). Indítsuk el az előző leckékben bemutatott Spark docker stack-et (docker-hadoop-spark-workbench), másoljuk át a container-be a JSON fájlt, lépjünk be a spark-master container-be és futtassuk a shell-t:

A spark.read.json metódus közvetlenül JSON fájlból tud DataFrame-et építeni. Tetszőleges DataFrame (nem csak a JSON-ből betöltött) regisztrálható mint SQL tábla (registerTempTable() metódus hívás), ami után az SQL API segítségével tetszőleges SQL lekérdezést hajthatunk végre rajta. Töltsük még be a sales_entries.csv fájlt is, majd kapcsoljuk össze a két táblát egy lekérdezésben:

Python

Természetesen a Spark SQL API Python-ban is rendelkezésre áll. A fenti példák megoldása pyspark shell-ben így néz ki:

Book to read, knowledge, lecture, open book, reading book icon 2. fejezet

Az MLLib modul használata

Az MLlib [7] (vagy újabban Spark ML) modul a Spark gépi tanulást támogató komponense. Segít abban, hogy a Hadoop klaszteren tárolt adatainkra gyorsan, könnyedén és jól skálázható módon alkalmazhassunk gépi tanuló algoritmusokat. Az MLlib az újabb verzióktól kezdve a DataFrame API-ra épül, noha az RDD alapú API is karbantartás alatt marad.

A fejezet során az alábbi gépi tanulási feladatot végezzük el:

A vázolt lépések végrehajtása a pyspark shell-ben az alábbi módon néz ki:

Check mark icon set. Green OK or V tick, red X, exclamation mark ...További feladatok

  1. Töltsük be és kapcsoljuk a többi adathoz Spark SQL segítségével a billing_entries.json fájlt is!
  2. A 2. fejezetben bemutatott gépi tanuló feladat lépéseit szervezzük egy Pipeline-ba, és egyben hajtsuk végre a tanítást!
  3. Készítsünk az előző feladatban elkészített megoldásból egy önálló Python alkalmazást, és hajtsuk végre spark-submit segítségével!

Referenciák

[1] https://spark.apache.org/docs/latest/sql-programming-guide.html#datasets-and-dataframes

[2] https://spark.apache.org/docs/latest/ml-guide.html

[3] https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/reprocessed.hungarian.data

[4] https://towardsdatascience.com/apache-spark-mllib-tutorial-ec6f1cb336a9