Kontrollpunktsfiler tas inte bort när du använder display()

Problem

Du har ett direkt uppspelnings jobb display() som använder för att Visa DataFrames.

val streamingDF = spark.readStream.schema(schema).parquet(<input_path>)
display(streamingDF)

Checkpoint-filer skapas, men tas inte bort.

Du kan kontrol lera problemet genom att gå till rot katalogen och leta i /local_disk0/tmp/ mappen. Checkpoint-filer finns kvar i mappen.

Orsak

Kommandot display(streamingDF) är en minnes mottagar implementering som kan visa data från strömnings-DataFrame för varje Micro batch. En kontroll punkts katalog krävs för att spåra strömmande uppdateringar.

Om du inte har angett en anpassad plats för kontroll punkt skapas en standard kontroll punkts katalog /local_disk0/tmp/ .

Azure Databricks använder katalogen för kontroll punkter för att säkerställa korrekt och konsekvent förlopps information. När en data ström stängs av, antingen i syfte eller av misstag, kan du med hjälp av kontroll punkts katalogen Azure Databricks starta om och hämta exakt var den slutade.

Om en data ström stängs av genom att avbryta data strömmen från antecknings boken försöker Azure Databrickss jobbet rensa kontroll punkts katalogen på bästa möjliga sätt. Om strömmen avbryts på något annat sätt, eller om jobbet avslutas, rensas inte kontroll punkts katalogen.

Detta är utformat.

Lösning

Du kan förhindra oönskade Checkpoint-filer med följande rikt linjer.

  • Du bör inte använda display(streamingDF) i produktions jobb.
  • Om display(streamingDF) är obligatoriskt för ditt användnings fall bör du manuellt ange Checkpoint-katalogen med hjälp av alternativet Apache Spark config spark.sql.streaming.checkpointLocation .
  • Om du anger en kontroll punkts katalog manuellt bör du regelbundet ta bort eventuella återstående filer i den här katalogen. Detta kan göras varje vecka.