嗨@Kushal薩哈,
您可以使用Azure磚效用函數
dbutils.fs.rm
這個函數利用原生雲存儲文件係統API,這是所有文件操作的優化。
然而,您不能刪除一個巨大的表直接使用
dbutils.fs.rm(“路徑/ / /表”)
對於小表,收集路徑的文件刪除適合司機內存,那麼您可以使用一個火花工作分發文件刪除任務。
對於巨大的表,即使對於一個頂級分區,文件路徑的字符串表示不能適應司機記憶。
解決這個問題最簡單的方法是遞歸地收集內部分區的路徑,並行路徑列表,刪除它們。
進口scala.util。{嚐試,成功,失敗}def刪除(p:字符串):單位= {dbutils.fs.ls (p) . map (_.path) .toDF。= > dbutils.fs.rm foreach{文件(文件(0)。toString, true) println (s“刪除文件:$文件”)}}最後def walkDelete(根:字符串)(水平:Int):單位= {dbutils.fs.ls(根). map (_.path)。foreach {p = > println (s”刪除:$ p水平:${水平}")val刪除=嚐試{如果(水平= = 0)刪除(p) else if (p endsWith“/”) walkDelete (p)(第1層)/ / / /設置隻有n水平的遞歸,所以它不會成為一個問題/ /其他刪除(p)}{刪除匹配成功案例(v) = > {println (s成功刪除$ p) dbutils.fs。rm失敗(p,真的)}(e) = > println (e.getMessage)}}}
同時確保代碼刪除內部分區被刪除的分區是足夠小。它通過搜索通過遞歸分區每個級別,隻有開始刪除當它擊中級別設置。
例如,如果你想開始刪除頂級分區,使用
walkDelete(根)(0)。
火花將會刪除所有的文件在dbfs: / mnt /表/ = 1 / /路徑,然後刪除…/ = 2 /模式後,直到精疲力竭。
嗨@Kushal薩哈,
您可以使用Azure磚效用函數
dbutils.fs.rm
這個函數利用原生雲存儲文件係統API,這是所有文件操作的優化。
然而,您不能刪除一個巨大的表直接使用
dbutils.fs.rm(“路徑/ / /表”)
對於小表,收集路徑的文件刪除適合司機內存,那麼您可以使用一個火花工作分發文件刪除任務。
對於巨大的表,即使對於一個頂級分區,文件路徑的字符串表示不能適應司機記憶。
解決這個問題最簡單的方法是遞歸地收集內部分區的路徑,並行路徑列表,刪除它們。
進口scala.util。{嚐試,成功,失敗}def刪除(p:字符串):單位= {dbutils.fs.ls (p) . map (_.path) .toDF。= > dbutils.fs.rm foreach{文件(文件(0)。toString, true) println (s“刪除文件:$文件”)}}最後def walkDelete(根:字符串)(水平:Int):單位= {dbutils.fs.ls(根). map (_.path)。foreach {p = > println (s”刪除:$ p水平:${水平}")val刪除=嚐試{如果(水平= = 0)刪除(p) else if (p endsWith“/”) walkDelete (p)(第1層)/ / / /設置隻有n水平的遞歸,所以它不會成為一個問題/ /其他刪除(p)}{刪除匹配成功案例(v) = > {println (s成功刪除$ p) dbutils.fs。rm失敗(p,真的)}(e) = > println (e.getMessage)}}}
同時確保代碼刪除內部分區被刪除的分區是足夠小。它通過搜索通過遞歸分區每個級別,隻有開始刪除當它擊中級別設置。
例如,如果你想開始刪除頂級分區,使用
walkDelete(根)(0)。
火花將會刪除所有的文件在dbfs: / mnt /表/ = 1 / /路徑,然後刪除…/ = 2 /模式後,直到精疲力竭。