A Spark SQL egy Spark modul a strukturált adatok feldolgozásához. Az alapvető Spark RDD API-tól eltérően a Spark SQL által biztosított interfészek több információt biztosítanak a Spark számára mind az adatok, mind a végrehajtott számítás szerkezetéről. Belsőleg a Spark SQL ezt a többletinformációt extra optimalizációk elvégzésére használja. A Spark SQL-lel való interakciónak több módja van, beleértve az SQL és a Dataset API-t is. Az eredmény kiszámításakor ugyanazt a végrehajtási motort használja, függetlenül attól, hogy melyik API/nyelvet használja a számítás kifejezésére. Ez az egységesítés azt jelenti, hogy a fejlesztők könnyen válthatnak oda-vissza a különböző API-k között az alapján, hogy melyik biztosítja a legtermészetesebb módot egy adott átalakítás kifejezésére.
Az ezen az oldalon található összes példa a Spark disztribúcióban szereplő mintaadatokat használja, és a spark-shell
, pyspark
shellben vagy sparkR
shellben futtatható.
SQL
A Spark SQL egyik felhasználási módja az SQL-lekérdezések végrehajtása.A Spark SQL arra is használható, hogy adatokat olvasson be egy meglévő Hive telepítésből. Ennek a funkciónak a konfigurálásáról bővebben a Hive táblák című fejezetben olvashat. Ha az SQL futtatása egy másik programozási nyelvből történik, az eredmények Dataset/DataFrame-ként kerülnek visszaadásra.Az SQL felülettel a parancssoron keresztül vagy JDBC/ODBC-n keresztül is kapcsolatba léphet.
Datasets and DataFrame
A Dataset egy elosztott adatgyűjtemény.Az Dataset a Spark 1.6-ban hozzáadott új interfész, amely az RDD-k előnyeit (erős tipizálás, nagy teljesítményű lambda függvények használatának lehetősége) a Spark SQL optimalizált végrehajtási motorjának előnyeivel biztosítja. A Dataset JVM objektumokból építhető fel, majd funkcionális transzformációkkal (map
, flatMap
, filter
stb.) manipulálható.A Dataset API elérhető Scala ésJava nyelven. A Python nem támogatja a Dataset API-t. De a Python dinamikus jellegéből adódóan,a Dataset API számos előnye már elérhető (pl. egy sor mezőjét természetesenrow.columnName
név szerint lehet elérni). Az R esetében hasonló a helyzet.
A DataFrame egy megnevezett oszlopokba rendezett Dataset. Fogalmilag egyenértékű egy relációs adatbázisban lévő táblával vagy egy adatkerettel az R/Pythonban, de gazdagabb optimalizációkkal a motorháztető alatt. DataFrame-eket sokféle forrásból lehet létrehozni, például: strukturált adatfájlokból, Hive táblákból, külső adatbázisokból vagy meglévő RDD-kből.A DataFrame API elérhető Scala, Java, Python és R nyelven.Scalában és Javában egy DataFrame-et egy Row
s adathalmaz képvisel.A Scala API-ban a DataFrame
egyszerűen a Dataset
típus aliasát jelenti.Míg a Java API-ban a felhasználóknak a Dataset<Row>
-t kell használniuk a DataFrame
reprezentálásához.
Ebben a dokumentumban gyakran fogunk a Scala/Java Row
s adathalmazokra DataFrame-ként hivatkozni.
Mindenhol DataFrame-ként fogunk hivatkozni.