[英]RecursionError: maximum recursion depth exceeded in comparison'
在我的 Python 腳本中,我正在確定 Azure Datalake 存儲 Gen2 中的目錄大小。 在我檢查更大的目錄之前,代碼工作正常。
import sys
from dbutils import FileInfo
from typing import List
sys.setrecursionlimit(2000)
root_path = "/mnt/datalake/.../"
def discover_size(path: str, verbose: bool = True):
def loop_path(paths: List[FileInfo], accum_size: float):
if not paths:
return accum_size
else:
head, tail = paths[0], paths[1:]
if head.size > 0:
if verbose:
accum_size += head.size / 1e6
return loop_path(tail, accum_size)
else:
extended_tail = dbutils.fs.ls(head.path) + tail
return loop_path(extended_tail, accum_size)
return loop_path(dbutils.fs.ls(path), 0.0)
discover_size(root_path, verbose=True)
首先查看 OOM(Out of Memory) 問題並添加
sys.setrecursionlimit(2000)
。
現在,另一個錯誤-
RecursionError: maximum recursion depth exceeded in comparison
如何克服這個問題。
dbutils.fs.ls()
的文檔遠非完美,而且我手頭沒有 DataBricks 環境,但如果不使用真正的遞歸,這樣的東西可能會更好地工作,而是留下要訪問的路徑列表。
import dbutils
def discover_size(path: str) -> int:
total_size = 0
visited = set()
to_visit = [path]
while to_visit:
path = to_visit.pop(0)
if path in visited:
print("Already visited %s..." % path)
continue
visited.add(path)
print(
f"Visiting %s, size %s so far..." % (path, total_size),
)
for info in dbutils.fs.ls(path):
total_size += info.size
if info.isDir():
to_visit.add(info.path)
return total_size
discover_size("/mnt/datalake/.../", verbose=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.