17-11-2021

Spark 3.2 biedt nauwere banden met Pandas en SQL

Deel dit bericht

De Apache Spark-gemeenschap heeft Spark 3.2 aangekondigd, een belangrijke release van het gedistribueerde computerframework. Onder de meer opwindende functies zijn diepere ondersteuning voor het Python data ecosysteem, inclusief de toevoeging van de Pandas API; voltooiing van de ASNI SQL ondersteuningsmodus; en de toevoeging van RocksDB.

De afgelopen drie jaar heeft de Apache Spark-gemeenschap er aan gewerkt om de omgevingen van Spalk en Python beter te laten samenwerken. Dat begon in 2019 met Databricks' Koalas-project, dat de pandas DataFrame API op Spark implementeerde. Die Python-inspanning liep door tot januari 2020 met de lancering van Spark 3.0 en Project Zen, zo genoemd naar de Zen of Python-gids van Python-principes. Dit leverde een herontworpen pandas UDF en betere foutrapportage op in Spark 3.0, terwijl in 3.1 de nadruk lag op het Python-vriendelijker en gebruiksvriendelijker maken van PySpark. Koalas is sindsdien opgegaan in PySpark.

Met Spark 3.2 gaat de integratie met pandas een stapje verder. Mensen die in pandas werken kunnen nu hun pandas applicatie opschalen met een enkele regelverandering, waardoor die applicatie voordeel kan halen uit multi-node Spark clusters, een mogelijkheid die de mensen van Databricks toeschrijven aan "verfijnde optimalisaties in de Spark engine”. "Een van de bekende beperkingen in pandas is dat het niet lineair schaalt met je datavolume als gevolg van single-machine processing," schreven Databricks ingenieurs in een blogpost van 4 oktober. "Pandas faalt bijvoorbeeld met out-of-memory als het een dataset probeert te lezen die groter is dan het beschikbare geheugen in een enkele machine."

Interactieve datavisualisatie
In tests toonde de nieuwe pandas API in Spark 3.2 aan dat pandas applicaties bijna lineair kunnen schalen tot 256 nodes, zo toonden de ingenieurs aan. Ook de single-machine prestaties werden verbeterd. Spark 3.2 geeft Python-gebruikers ook toegang tot de "unified analytics"-functionaliteit die Spark biedt, inclusief het bevragen van gegevens via SQL, streaming processing en machine learning (ML). Dit stelt datawetenschappers die in pandas werken in staat om verder te gaan dan de oorspronkelijke focus van de bibliotheek op batch analytics.

Ten slotte biedt de nieuwe pandas API ook interactieve datavisualisatie aan, aangedreven door plotly, als een alternatief voor de pandas standaard matplotlib. Het gebruik van plotly ondersteunt interactieve grafieken. Spark's SQL ondersteuning wordt ook beter in 3.2. Met name ondersteuning voor laterale joins, een functie in de ANSI SQL-specificatie, is toegevoegd. De ANSI SQL-modus is nu algemeen beschikbaar, aldus Databricks. Maar het is niet standaard ingeschakeld.

RocksDB
Een implementatie van RocksDB is ook toegevoegd aan Spark met versie 3.2. RocksDB is een database voor key-value data die is ingebed in een verscheidenheid van projecten, waaronder Apache Kafka, waar het stateful data helpt te onderhouden. De use case lijkt vergelijkbaar in Spark, aangezien Databricks RocksDB heeft gepositioneerd om de bestaande state store in Structured Streaming te vervangen, die volgens het bedrijf momenteel niet voldoende schaalbaar is vanwege de beperkte heap grootte van de executors.
Databricks heeft RocksDB vier jaar lang gebruikt in zijn eigen implementatie van Spark, en heeft die code nu teruggedragen aan de Apache Spark-gemeenschap, zodat iedereen gebruik kan maken van de voordelen van het bewaren van stateful data, ongeacht hoe groot de Spark-streamingapp wordt. Deze state store kan volgens Databricks volledige scans vermijden door sleutels te sorteren, en data serveren vanaf de schijf zonder afhankelijk te zijn van de heap grootte van executors.

Adaptive Query Execution
De laatste grote verbetering in Spark 3.2 is het standaard inschakelen van Adaptive Query Execution (AQE). AQE, dat werd geïntroduceerd met Spark 3.0, maakt gebruik van verschillende technieken om de prestaties van Spark-workloads te verbeteren, waaronder het dynamisch samenvoegen van shuffle-partities om de noodzaak van het afstemmen van het aantal shuffle-partities te beperken; het dynamisch wisselen van join-strategieën om te voorkomen dat suboptimale plannen worden uitgevoerd als gevolg van ontbrekende statistieken; en het dynamisch optimaliseren van skew joins om extreme onevenwichtigheden in het werk te helpen voorkomen.
Spark 3.2 zorgt ook voor betere prestaties voor kleine data-omgevingen. De overhead van Spark query compilatie kan de prestaties schaden wanneer het volume van de verwerkte data aanzienlijk klein is, aldus Databricks. Om de query compilatie latentie verder te verminderen, verwijdert Spark nu onnodige query plan traversals in analyzer/optimizer regels en versnelt de constructie van nieuwe query plannen, aldus het bedrijf. "Als gevolg hiervan is de compileertijd van TPC-DS queries met 61 procent verminderd, vergeleken met Spark 3.1.2", schrijven de ingenieurs.

Spark is open source en kan gratis worden gedownload op spark.apache.org

Partners