如何在 Databricks 中使用 os.walk() 来计算 Azure datalake 中的目录大小

How to use os.walk() in Databricks to calculate directory size in Azure datalake

如何在 Databricks 中使用 os.walk 来计算 Azure datalake 中的目录大小。 Python 我使用的版本是 3.

我首先使用递归方法获取目录大小,当文件路径在目录内部更深时失败并出现 OOM 错误。

现在我很好奇 os.Walk() 是否有效。

任何片段都会有所帮助。

递归函数代码如下:[当它的路径更深时失败,所以,我需要不同的解决方案]

from dbutils import FileInfo
from typing import List

root_path = "/mnt/ADLS/...../..../"

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:
            <some code>
      else:
            <some code>
  return loop_path(dbutils.fs.ls(path), 0.0)

discover_size(root_path, verbose=True)

你能试试这个并反馈吗?

# Python
import sys, os
root = "/dbfs/mnt/rawdata/"
path = os.path.join(root, "targetdirectory")
for path, subdirs, files in os.walk(root):
    for name in files:
        print(os.path,joint(path, name))

或者这个?

# Python
import sys, os
import pandas as pd

mylist = []
    root = '/dbfs/mnt/rawdata/'
    path = os.path.join(root, 'targetdirectory')
    for path, subdirs, files in os.walk(root):
        for name in files:
            mylist.append(os.path.join(path, name))

len(mylist)
df = pd.DataFrame(mylist)

display(df)

# convert python df to spark df
spark_df = spark.createDataframe(df)
# write df out as table
spark_df.write.csv("/rawdata/final.csv")