RecursionError:比较中超出了最大递归深度'

问题描述 投票:0回答:1

在我的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(内存不足)问题并添加

sys.setrecursionlimit(2000)

现在,另一个错误-

RecursionError: maximum recursion depth exceeded in comparison

如何克服这个问题。

python python-3.x apache-spark pyspark databricks
1个回答
0
投票

dbutils.fs.ls()的文档还远远不够完美,我手头没有DataBricks环境,但是在不使用实际递归的情况下,类似这样的方法可能会更好地工作,但是需要访问的路径列表。

dbutils.fs.ls()
© www.soinside.com 2019 - 2024. All rights reserved.