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

ASH*_*ASH 5 python scala azure-data-lake databricks azure-databricks

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

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)
Run Code Online (Sandbox Code Playgroud)

我还尝试了此链接中的示例代码:

Python 列出目录、子目录和文件

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

Hau*_*low 8

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

所以在路径/dbfs : 必须包括:

root = "/dbfs/mnt/rawdata/parent/"
Run Code Online (Sandbox Code Playgroud)

这与使用Databricks 文件系统实用程序 (DBUtils) 不同。文件系统实用程序访问 Databricks 文件系统,从而可以更轻松地将 Azure Databricks 用作文件系统:

dbutils.fs.ls("/mnt/rawdata/parent/")
Run Code Online (Sandbox Code Playgroud)

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


ASH*_*ASH 2

我让这个工作。

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)
Run Code Online (Sandbox Code Playgroud)

唯一的先决条件是您需要导入azure.storage. 因此,在 Clusters 窗口中,单击“Install-New”-> PyPI > package = 'azure.storage'。最后,单击“安装”。