列出位于数据湖中的文件夹中的所有文件

List All Files in a Folder Sitting in a Data Lake

我正在尝试获取一个文件夹中所有文件的清单,该文件夹有几个子文件夹,所有子文件夹都位于数据湖中。这是我正在测试的代码。

import sys, os
import pandas as pd

mylist = []
root = "/mnt/rawdata/parent/"
path = os.path.join(root, "targetdirectory") 

for path, subdirs, files in os.walk(path):
    for name in files:
        mylist.append(os.path.join(path, name))


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

我也尝试了这个 link:

中的示例代码

Python list directory, subdirectory, and files

我在 Azure Databricks 工作。我愿意使用 Scala 来完成这项工作。到目前为止,没有什么对我有用。每次,我都会得到一个空的数据框。我相信这非常接近,但我一定遗漏了一些小东西。想法?

Databricks 文件系统 (DBFS) 是一种分布式文件系统,安装在 Azure Databricks 工作区中,可在 Azure Databricks 群集上使用。如果您使用的是本地文件 API,则必须引用 Databricks 文件系统。 Azure Databricks 使用 FUSE 挂载 /dbfs 配置每个集群节点,允许集群节点上的进程 运行 使用本地文件 API 读取和写入底层分布式存储层]s(另见 documentation)。

所以在路径 /dbfs 中:必须包含:

root = "/dbfs/mnt/rawdata/parent/"

这与使用 Databricks Filesystem Utility (DBUtils) 不同。文件系统实用程序访问 Databricks 文件系统,从而更容易将 Azure Databricks 用作文件系统:

dbutils.fs.ls("/mnt/rawdata/parent/")

对于更大的数据湖,我可以在 Knowledge Base 中推荐一个 Scala 示例。 优点是它为所有分发的子叶运行列表,因此也适用于更大的目录。

我成功了。

from azure.storage.blob import BlockBlobService 

blob_service = BlockBlobService(account_name='your_account_name', account_key='your_account_key')

blobs = []
marker = None
while True:
    batch = blob_service.list_blobs('rawdata', marker=marker)
    blobs.extend(batch)
    if not batch.next_marker:
        break
    marker = batch.next_marker
for blob in blobs:
    print(blob.name)

唯一的前提是你需要导入azure.storage。因此,在 Clusters window 中,单击 'Install-New' -> PyPI > package = 'azure.storage'。最后,点击'Install'。