Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een langlopende fase met slechts één taak kent geen parallelisme. Terwijl de taak draait, doet één CPU het werk en kan de rest van de cluster inactief zijn. Workers toevoegen helpt niet, want Spark kan het werk niet over hen verspreiden.
Gebruik deze pagina wanneer de langste fase precies één taak heeft. Als de fase veel tasks heeft, controleer deze dan op skew en spill. Kijk naar Skew en spill.
Veelvoorkomende oorzaken en oplossingen
Een single-task-fase heeft meestal een van deze oorzaken. Zoek degene die bij jouw code past, en pas dan de oplossing toe:
- Een dure UDF op small data. Kleine input kan in één partitie terechtkomen, dus één taak draait de hele UDF. Herschrijf de UDF met native functies als dat kan. Anders moet je
repartition()de DataFrame transformeren voordat je de UDF toepast. Zie Langzame UDF's. - Een vensterfunctie zonder
PARTITION BY. Zonder clausulePARTITION BYbeslaat het venster de hele dataset, dus één taak verwerkt elke rij. Voeg eenPARTITION BYclausule toe als je logica dat toelaat. - Een niet-splitsbaar bestandstype. Spark kan geen bestanden zoals gzip-bestanden die uit meerdere delen bestaan lezen, dus één grote taak leest elk bestand. Als je dezelfde bestanden herhaaldelijk leest, laad ze dan één keer in een Delta Lake-tabel en raadpleeg in plaats daarvan de tabel.
- De optie
multiLinebij JSON- of CSV-lezingen. StelmultiLinealleen in wanneer records meerdere regels beslaan. Zie Lees meerlijnige JSON-bestanden. - Schema-inferentie op een groot bestand. Specificeer het schema in plaats van het af te leiden. Zie Specificeer een schema.
-
repartition(1)ofcoalesce(1). Deze zorgen ervoor dat alle data in één partitie terechtkomen. Verwijder ze, of gebruik meer partities, tenzij je één uitvoerbestand nodig hebt.