如何使用 dbutils 获取 adls gen2 中文件的创建时间

问题描述 投票:0回答:1

我正在尝试获取存储在 ADLS gen2 中的文件的创建时间。该文件由下游进程生成。在databricks中,通过读取文件创建数据框,我需要将文件的创建时间添加为数据框中的列。

我尝试使用 dbutils。但它只是给了我修改时间,如果文件有任何修改,修改时间就会改变。我什至尝试了 os.stat ,它给了我创建时间,但它正在根据对文件的修改而变化,这是意外的。

  1. Dbutils 代码

    filepath='文件的挂载路径'

    modificationTime=dbutils.fs.ls(文件路径)[0].modificationTime

  2. os.stat代码

    import datetime
    import os
    statinfo = os.stat('/dbfs/'+filepath)
    create_date = datetime.fromtimestamp(statinfo.st_ctime)
    

如有任何帮助,我们将不胜感激

azure pyspark azure-databricks azure-data-lake-gen2 dbutils
1个回答
0
投票

要获取存储在 Azure Data Lake Storage (ADLS) Gen2 中的文件的创建时间,可以使用适用于 Python 的 Azure SDK,而不是依赖

dbutils
os.stat
,这有时会产生不一致的结果。 Azure 存储 Blob SDK 提供对创建时间等属性的访问,这些属性作为元数据存储在 Blob 中。您可以使用以下代码获取存储在 ADLS 帐户中的文件的创建时间:

from azure.storage.blob import BlobServiceClient

connection_string = "<connectionString>"
container_name = "<containerName>"
file_path = "<filePath>"  
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_path)
properties = blob_client.get_blob_properties()
print(f"File: {file_path}")
print("  Creation Time:", properties.creation_time)
print("  Last Modified Time:", properties.last_modified)
print("  Size (in bytes):", properties.size)

您将得到如下所示的输出:

enter image description here

您将能够在上面的输出中找到

Creation Time
Last Modified Time
之间的区别。如果您想在目录中获取
Creation Time
Last Modified Time
多个文件,您可以使用以下代码:

from azure.storage.blob import BlobServiceClient

connection_string = "<connectionString>"
container_name = "<containerName>"
directory_path = "<directory>"  
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
container_client = blob_service_client.get_container_client(container_name)
files = dbutils.fs.ls("<mountPath>")
for file_info in files:
    file_path = f"{directory_path}/{file_info.name}"  # Construct relative path within container
    blob_client = container_client.get_blob_client(blob=file_path)

    try:
        properties = blob_client.get_blob_properties()
        print(f"File: {file_path}")
        print("  Creation Time:", properties.creation_time)
        print("  Last Modified Time:", properties.last_modified)
        print("  Size (in bytes):", properties.size)
    except Exception as e:
        print(f"Error retrieving properties for {file_path}: {e}")

您将得到如下所示的输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.