如何使用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")