如何在Databricks中用dbutils获取ADLS Gen2文件创建时间并添加至DataFrame
获取ADLS Gen2文件原始创建时间并添加到DataFrame
问题分析
你尝试的dbutils.fs.ls返回的是文件最后修改时间,os.stat的st_ctime是DBFS层的缓存修改时间,都无法获取ADLS Gen2上文件的原始创建时间(该时间不会随后续文件修改而变化)。以下是两种可行解决方案:
方案1:使用Azure Storage Blob SDK直接查询ADLS Gen2元数据
ADLS Gen2原生存储了文件的creation_time属性,可通过Azure SDK直接读取:
- 安装依赖(若未安装):
%pip install azure-storage-blob azure-identity
- 读取文件原始创建时间:
from azure.storage.blob import BlobServiceClient from azure.identity import DefaultAzureCredential import datetime # 替换为你的ADLS Gen2信息 account_name = "你的ADLS账户名" container_name = "你的容器名" # 容器内的文件相对路径(非Mount路径) file_relative_path = "path/to/target/file.csv" # 初始化客户端 credential = DefaultAzureCredential() blob_service_client = BlobServiceClient( account_url=f"https://{account_name}.dfs.core.windows.net", credential=credential ) # 获取文件属性 blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_relative_path) blob_props = blob_client.get_blob_properties() # 提取原始创建时间 original_creation_time = blob_props.creation_time
- 将创建时间添加到DataFrame:
from pyspark.sql.functions import lit # 读取文件为DataFrame df = spark.read.csv("/mnt/你的Mount路径/path/to/target/file.csv") # 新增创建时间列 df_with_creation = df.withColumn("file_creation_time", lit(original_creation_time))
方案2:使用Hadoop Filesystem API获取元数据
无需额外安装SDK,利用Spark底层的Hadoop API读取ADLS Gen2的创建时间:
from pyspark.sql.functions import lit from org.apache.hadoop.fs import Path from org.apache.hadoop.conf import Configuration import datetime # 文件的DBFS/Mount路径 dbfs_file_path = "/mnt/你的Mount路径/path/to/target/file.csv" # 获取Hadoop文件系统实例 conf = Configuration() fs = Path(dbfs_file_path).getFileSystem(conf) # 获取文件状态,提取原始创建时间 file_status = fs.getFileStatus(Path(dbfs_file_path)) original_creation_time = datetime.datetime.fromtimestamp(file_status.getCreationTime() / 1000) # 添加到DataFrame df = spark.read.csv(dbfs_file_path) df_with_creation = df.withColumn("file_creation_time", lit(original_creation_time))
关键说明
- ADLS Gen2的
creation_time是文件首次上传/生成时的时间,后续修改文件内容或元数据不会改变该值。 - 方案1需确保Databricks集群有权限访问ADLS Gen2(可通过MSI或服务 principal授权);方案2依赖集群已配置ADLS Gen2的挂载或直接访问权限。
内容的提问来源于stack exchange,提问作者x_coder
相关产品推荐
相关产品推荐

