問題
你有一個流作業使用顯示()來顯示數據幀。
%scala val streamingDF = spark.readStream.schema(schema).parquet() display(streamingDF)
檢查點文件正在創建,但沒有被刪除。
方法導航到根目錄並查看/ local_disk0 / tmp /文件夾中。檢查點文件保留在文件夾中。
導致
命令顯示器(streamingDF)是一個內存接收器實現,可以顯示每個微批的流DataFrame中的數據。需要一個檢查點目錄來跟蹤流更新。
如果未指定自定義檢查點位置,則在此處創建默認檢查點目錄/ local_disk0 / tmp /.
Databricks使用檢查點目錄來確保正確和一致的進度信息。當一個流被有意或無意地關閉時,檢查點目錄允許Databricks重新啟動並從它停止的地方重新開始。
如果通過從筆記本中取消流而關閉流,Databricks作業將嚐試盡最大努力清理檢查點目錄。如果流以任何其他方式終止,或者作業終止,則檢查點目錄不會被清理。
這是設計好的。
解決方案
您可以使用以下指導原則來防止不需要的檢查點文件。
- 你不應該使用顯示器(streamingDF)在生產工作中。
- 如果顯示器(streamingDF)對於您的用例是強製的,您應該使用Apache Spark配置選項手動指定檢查點目錄spark.sql.streaming.checkpointLocation.
- 如果手動指定檢查點目錄,則應定期刪除此目錄中的所有剩餘文件。這可以每周做一次。