isEmpty en lugar de count(): la barrera que costaba 3 minutos
Comprobar la existencia de datos con count() escanea TODO para producir un número que luego comparas con cero; isEmpty (o take(1)) se detiene en la primera fila encontrada.
Requisitos
PySpark 3.3+ (DataFrame.isEmpty)
Python
import time
from pyspark.sql import functions as F
increment = df.filter(F.col("updated_at") > derniere_borne)
t0 = time.perf_counter()
if increment.count() == 0: # ANTI-PATTERN : compte TOUT pour tester > 0
print("rien à faire")
print(f"count() : {time.perf_counter() - t0:6.1f} s")
t0 = time.perf_counter()
if increment.isEmpty(): # s'arrête à la première ligne trouvée
print("rien à faire")
print(f"isEmpty() : {time.perf_counter() - t0:6.1f} s")
# Même logique partout : préférer take(1) / limit(1) à un count() complet
# dès que seule l'EXISTENCE importe, pas le nombre exact.Resultado
count() : 184.6 s (scan complet : 1,2 To lus pour obtenir « 9 412 ») isEmpty() : 2.1 s (première ligne trouvée dès la partition 003) Gain : x88 sur un simple garde-fou exécuté à CHAQUE run de l'orchestrateur Sur 24 runs/jour, c'est 73 h de cluster économisées par mois
PySparkisEmptycountPerformance