Как рассчитать размер каталога в ADLS с помощью PySpark? - PullRequest
1 голос
/ 20 апреля 2020

Я хочу рассчитать размер каталога (например, XYZ), который содержит вложенные папки и вложенные файлы. Я хочу, чтобы общий размер всех файлов и всего внутри XYZ.

Я мог бы найти все папки внутри определенного пути. Но я хочу размер всего вместе. Также я вижу,

display(dbutils.fs.ls("/mnt/datalake/.../XYZ/.../abc.parquet"))

дает мне размер данных файла ab c. Но я хочу полный размер XYZ.

1 Ответ

1 голос
/ 20 апреля 2020

dbutils.fs.ls не имеет функции рекурсии, такой как cp, mv или rm. Таким образом, вам нужно повторить себя. Вот фрагмент, который выполнит задачу за вас. Запустите код из Блокнота данных.

from dbutils import FileInfo
from typing import List

root_path = "/mnt/datalake/.../XYZ"

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:
          print(f"{head.path}: {head.size / 1e6} MB")
        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)  # Total size in megabytes at the end

Если расположение смонтировано в dbfs. Тогда вы можете использовать подход du -h (не тестируйте его). Если вы находитесь в блокноте, создайте новую ячейку с:

%sh
du -h /mnt/datalake/.../XYZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...