PySpark az Azure Databricksben
Az Azure Databricks az Apache Sparkra, a big data és a gépi tanulás egységes elemzési motorjára épül. A PySpark segítségével a Python programozási nyelv használatával kommunikálhat az Apache Sparkkal, amely egy könnyen elsajátítható, implementálható és karbantartható, rugalmas nyelv. Emellett számos lehetőséget kínál az adatvizualizációra a Databricksben. A PySpark egyesíti a Python és az Apache Spark erejét.
Ez a cikk áttekintést nyújt a PySpark alapjairól a Databricksen.
Bevezetés a Spark-fogalmakba
A PySpark használata előtt fontos megérteni az Apache Spark legfontosabb fogalmait.
Adatkeretek
Az Apache Spark elsődleges objektumai a DataFrame-ek. A DataFrame egy elnevezett oszlopokba rendezett adathalmaz. A DataFrame-et úgy tekintheti, mint egy számolótábla vagy egy SQL-tábla, egy rekordsorozat kétdimenziós címkével ellátott adatstruktúrája (hasonló a táblázat soraihoz) és a különböző típusú oszlopokhoz. A DataFrame-ek függvények gazdag készletét biztosítják (például oszlopokat jelölnek ki, szűrnek, illesztenek és összesítenek), amelyek lehetővé teszik a gyakori adatmanipulációs és elemzési feladatok hatékony végrehajtását.
Néhány fontos DataFrame-elem:
- Séma: A séma határozza meg a DataFrame oszlopneveit és típusait. Az adatformátumok különböző szemantikával rendelkeznek a sémadefinícióhoz és a kényszerítéshez. Egyes adatforrások sémainformációkat nyújtanak, míg mások manuális sémadefinícióra támaszkodnak, vagy lehetővé teszik a séma következtetését. A felhasználók manuálisan definiálhatnak sémákat, vagy a sémák olvashatók egy adatforrásból.
-
Sorok: A Spark objektumként
Row
jelöli a DataFrame rekordjait. Amíg az olyan mögöttes adatformátumok, mint a Delta Lake, oszlopokat használnak az adatok tárolására, addig a Spark az optimizálás érdekében sorokat használva gyorsítótárazza és rendezi át az adatokat. -
Oszlopok: A Spark oszlopai hasonlóak a számolótáblák oszlopaihoz, és egy egyszerű típust, például sztringet vagy egész számot jelölhetnek, de olyan összetett típusokat is, mint a tömb, a térkép vagy a null. Olyan lekérdezéseket írhat, amelyek oszlopokat jelölnek ki, módosítanak vagy eltávolítanak egy adatforrásból. Lehetséges adatforrások lehetnek táblák, nézetek, fájlok vagy más Adatkeretek. Az oszlopok soha nincsenek eltávolítva egy adathalmazból vagy DataFrame-ből; csak az eredményekből maradnak ki
.drop
átalakítások vagyselect
utasítások kihagyása révén.
Adatfeldolgozás
Az Apache Spark lusta kiértékeléssel dolgozza fel a DataFrame-ekkel definiált átalakításokat és műveleteket. Ezek a fogalmak alapvető fontosságúak a Sparkkal végzett adatfeldolgozás megértéséhez.
Átalakítások: A Sparkban a feldolgozási logikát transzformációkként fejezi ki, amelyek az adatok DataFrame-ekkel való betöltésére és manipulálására szolgálnak. A gyakori átalakítások közé tartozik az adatok olvasása, az illesztések, az összesítések és a típus-öntés. Az Azure Databricksben végzett átalakításokról további információt az Adatok átalakítása című témakörben talál.
Lusta kiértékelés: A Spark optimalizálja az adatfeldolgozást a leghatékonyabb fizikai terv azonosításával az átalakítások által meghatározott logika kiértékeléséhez. A Spark azonban csak a műveletek meghívása után hajtja végre az átalakításokat. Ahelyett, hogy az egyes átalakításokat a megadott sorrendben értékelte, a Spark megvárja, amíg egy művelet számítást indít el az összes átalakításon. Ezt lusta kiértékelésnek vagy lusta betöltésnek nevezzük, amely lehetővé teszi, hogy több műveletet is láncoljon, mivel a Spark késleltetett módon kezeli a végrehajtásukat ahelyett, hogy a definiálásukkor azonnal végrehajtanák őket.
Feljegyzés
A lusta kiértékelés azt jelenti, hogy a DataFrames a logikai lekérdezéseket utasításkészletként tárolja egy adatforráshoz, nem pedig egy memóriabeli eredményhez. Ez jelentősen eltér a lelkes végrehajtástól, amely a pandas DataFrames által használt modell.
Műveletek: A műveletek arra utasítják a Sparkot, hogy kiszámítsa az egy vagy több DataFrame-en végrehajtott átalakítások eredményét. A műveletműveletek értéket adnak vissza, és az alábbiak bármelyike lehet:
- A konzolon vagy a szerkesztőben lévő adatok kimenetére irányuló műveletek, például
display
show
- Adatok gyűjtésére irányuló műveletek (objektumok visszaadása
Row
), példáultake(n)
, ésfirst
head
- Adatforrásba írható műveletek, például
saveAsTable
- Számítást kiváltó összesítések, például
count
Fontos
Az éles adatfolyamatokban az adatok írása általában az egyetlen művelet, amelyet meg kell jeleníteni. Minden más művelet megszakítja a lekérdezésoptimalizálást, és szűk keresztmetszetekhez vezethet.
Mit jelent, hogy a DataFrame-ek nem módosíthatók?
A DataFrame-ek olyan átalakítások és műveletek gyűjteményei, amelyek egy vagy több adatforráson vannak definiálva, de végül az Apache Spark feloldja a lekérdezéseket az eredeti adatforrásokra, így maga az adatok nem változnak, és a DataFrame-ek nem változnak. Más szóval a DataFrame-ek nem módosíthatók. Emiatt az átalakítások elvégzése után a rendszer egy új DataFrame-et ad vissza, amelyet egy változóba kell menteni ahhoz, hogy a későbbi műveletekben hozzáférhessen. Ha az átalakítás közbenső lépését szeretné kiértékelni, hívjon meg egy műveletet.
API-k és kódtárak
A Sparkhoz készült összes API-hoz hasonlóan a PySpark is számos API-val és kódtárral rendelkezik, amelyek lehetővé teszik és támogatják a hatékony funkciókat, többek között a következőket:
- Strukturált adatok feldolgozása relációs lekérdezésekkel a Spark SQL-lel és a DataFrame-ekkel. A Spark SQL lehetővé teszi, hogy SQL-lekérdezéseket keverjen Spark-programokkal. A Spark DataFrames segítségével hatékonyan olvashat, írhat, alakíthat át és elemezhet adatokat Python és SQL használatával, ami azt jelenti, hogy mindig a Spark teljes erejét használja ki. Tekintse meg a PySpark első lépéseit.
- Streamek méretezhető feldolgozása strukturált streameléssel. A streamelési számításokat ugyanúgy fejezheti ki, mint a statikus adatok kötegelt számításait, és a Spark SQL-motor növekményesen és folyamatosan futtatja azokat, ahogy a streamelési adatok folyamatosan érkeznek. Lásd a strukturált streamelés áttekintését.
- A Pandas adatstruktúrái és adatelemzési eszközei, amelyek az Apache Sparkon és a Pandas API-n működnek a Sparkon. A Sparkon futó Pandas API lehetővé teszi, hogy a pandas számítási feladatait bármilyen méretre skálázza úgy, hogy több csomóponton futtatja, egyetlen kódbázissal, amely a pandas (tesztek, kisebb adathalmazok) és a Spark (éles, elosztott adatkészletek) használatával működik. Tekintse meg a Pandas API-t a Sparkon – áttekintés.
- Gépi tanulási algoritmusok a Machine Learning (MLLib) használatával. Az MLlib egy Sparkra épülő skálázható gépi tanulási kódtár, amely egységes API-kat biztosít, amelyek segítenek a felhasználóknak gyakorlati gépi tanulási folyamatok létrehozásában és finomhangolásában. Lásd: Machine Learning Library – Áttekintés.
- Gráfok és gráf-párhuzamos számítások a GraphX-tal. A GraphX egy új irányított multigráfot vezet be az egyes csúcsokhoz és élekhez csatolt tulajdonságokkal, és gráfszámítási operátorokat, algoritmusokat és szerkesztőket tesz elérhetővé a gráfelemzési feladatok egyszerűsítése érdekében. Lásd a GraphX áttekintését.
Spark-oktatóanyagok
A Databricks-beli PySpark használati példáiért tekintse meg a következő cikkeket:
Az Apache Spark dokumentációja rövid útmutatókat és útmutatókat tartalmaz a Spark megismeréséhez, beleértve a következőket:
- PySpark DataFrames – rövid útmutató
- Spark SQL – első lépések
- Strukturált streamelési programozási útmutató
- Pandas API a Spark rövid útmutatóján
- Gépi tanulási kódtár programozási útmutatója
PySpark-referencia
Az Azure Databricks fenntartja a PySpark API-k saját verzióját és a megfelelő hivatkozást, amely az alábbi szakaszokban található: