当前位置: 首页 > 知识库问答 >
问题:

如何在databricks工作区中使用python获取azure datalake存储中每个文件的最后修改时间?

孟高峰
2023-03-14

我正在尝试获取 azure 数据湖中存在的每个文件的上次修改时间。

dbutils.fs.ls文件

对于文件中的fi:print(fi)

输出:-FileInfo(path = ' dbfs:/mnt/blob/rule _ sheet _ recon . xlsx ',name='rule_sheet_recon.xlsx ',size=10843)

这里我无法获得文件的最后修改时间。有什么办法可以得到那笔财产吗。

我尝试下面的shell命令来查看属性,但无法将其存储在python对象中。

%sh ls-ls/dbfs/mnt/blob/

输出:-总计0

0 -rw-r--r-- 1 根根 13577 九月 20 10:50 a.txt

0-rw-r--r--1 root 10843 Sep 20 10:50b.txt

共有3个答案

裴欣荣
2023-03-14

我们没有直接的方法来获得那些细节。但是我们是基于下面的简单python代码得到这些细节的。

示例:考虑一下,你想获取adls路径中的所有子目录和文件container_name/perver-II---你可以使用下面的代码

from pyspark.sql.functions import col
from azure.storage.blob import BlockBlobService
from datetime import datetime
import os.path

block_blob_service = BlockBlobService(account_name='account-name', account_key='account-key')
container_name ='container-firstname'
second_conatainer_name ='container-Second'
#block_blob_service.create_container(container_name)
generator = block_blob_service.list_blobs(container_name,prefix="Recovery/")
report_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')


for blob in generator:
    length = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.content_length
    last_modified = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.last_modified
    file_size = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.content_length
    line = container_name+'|'+second_conatainer_name+'|'+blob.name+'|'+ str(file_size) +'|'+str(last_modified)+'|'+str(report_time)
    print(line)
胡高寒
2023-03-14

如果已配置 DataBricks 群集,则可以避免需要帐户密钥和存储 blob 编码等。

import time

path = spark._jvm.org.apache.hadoop.fs.Path
sc = spark.SparkContext
fs = path('abfss://yourbucket@yourstorageacct.dfs.core.windows.net/').getFileSystem(sc._jsc.hadoopConfiguration())

res = fs.listFiles(path('abfss://yourbucket@yourstorageacct.dfs.core.windows.net/your/storage/path'), True)

while res.hasNext():
  file = res.next()
  localTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(file.getModificationTime() / 1000))
  print(f"{file.getPath()}: {localTime}")
周和安
2023-03-14

我们可以使用<code>os</code>包来获取信息。例如在pyspark中

import os

def get_filemtime(filename):
  return os.path.getmtime(filename)

您可以传递文件名的绝对路径,如dbfs:/mnt/adls/logs/ehub/app/0/2021/07/21/15/05/40.avro

 类似资料:
  • 问题内容: 我正在使用C程序,需要获取文件的最后修改时间。程序要做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它将调用另一个函数来检查文件的最后修改时间。 在该目录下有一个,和等当我使用ll命令我可以看到,列出目录在linux 和进行了修改,在5月4日,并于5月3日进行了修改。 但是,当程序检查这些文件中的每个文件时,它总是会返回3rd may。下面是我正在使用的代码。 我尝试了的所有

  • 问题内容: 有没有办法只选择目录中的最后一个文件(带有扩展名?) 还是我必须解析整个目录并使用检查? 问题答案: 是的,您必须通读它们。但是由于目录访问已被缓存,因此您不必担心。

  • 问题内容: 我是初学者,我在Java中找到了有关lastmodified文件的旧线程。我想要的是从一个目录中仅获取10个最近的文件,并将它们移动到另一个目录。 在该论坛中找到的这段代码运行良好,但是它从目录中获取所有文件并按日期对它们进行排序。 任何帮助将不胜感激,谢谢 这是代码: 我是初学者,很抱歉,如果使用该论坛犯了一些错误。 所以对我来说,我不知道如何在新代码中插入以上内容。 如果我保留第一

  • 问题内容: 我正在尝试使用Python将CSV文件加载到Amazon S3。我需要知道CSV文件的修改时间。我正在使用ftplib将FTP与Python(2.7)连接。 问题答案: MLST或MDTM 虽然可以使用或命令通过FTP检索单个文件的时间戳,但ftplib都不支持。 当然,您可以使用实现自己的或。 有关详细信息,请参阅RFC 3659,尤其是: 3.文件修改时间(MDTM) 7.机器处理

  • 问题内容: 我有一个脚本,该脚本需要根据文件创建和修改日期执行一些操作,但必须在Linux和Windows上运行。 在Python中获取文件创建和修改日期/时间的最佳跨平台方法是什么? 问题答案: 以跨平台的方式获取某种修改日期很容易-只需调用,你就会获得Unix时间戳,该时间戳是文件的最后修改时间。 另一方面,获取文件的创建日期是不固定的,并且依赖于平台,甚至在三大操作系统之间也有所不同: 在上

  • 我需要获取Azure Databricks下DBFS装载点(ADLS Gen1)中所有文件夹和文件的最后修改日期。文件夹结构如下: 使用以下Python代码获取最后修改日期: 从上面的代码中,我得到了所有包含文件的文件夹的正确修改日期。 但对于空文件夹,它会给出当前日期。不是上次修改日期。 然而,当我硬编码空文件夹的路径时,它会给出正确的修改日期: 打印(datetime.fromtimestam