可以使用azure python sdk根据上次修改时间过滤azure数据湖文件吗?

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

我正在尝试对存储在蔚蓝数据湖中的文件执行内存中操作。如果不使用ADL下载程序,我将找不到有关使用匹配模式的文档。

对于单个文件,这是我使用的代码

filename = '/<folder/<filename>.json'
with adlsFileSystemClient.open(filename) as f:
    for line in f:
         <file-operations>

但是我们如何根据文件名(字符串匹配)或上次修改日期进行过滤。

当我使用U-SQL时,我可以选择基于最后修改的选项来过滤文件集。

DECLARE EXTERNAL @TodaysTime = DateTime.UtcNow.AddDays(-1);

@rawInput=
    EXTRACT jsonString string,
            uri = FILE.URI()
            ,modified_date = FILE.MODIFIED()
    FROM @in
    USING Extractors.Tsv(quoting : true);



@parsedInput=
    SELECT *
    FROM @rawInput
    WHERE modified_date > @TodaysTime;

使用adlsFileSystemClient时是否有类似的选项来过滤在指定时间段内修改的文件?

Github问题:https://github.com/Azure/azure-data-lake-store-python/issues/300

感谢您的任何帮助。

python azure-data-lake u-sql
1个回答
1
投票

注意:

[这个问题最近在GitHub上由akharit回答。我在下面提供了his answer,可以解决我的要求。

** adls sdk本身没有任何内置功能,因为没有服务器端api仅返回在最近4个小时内修改的文件。在获得所有条目的列表之后,编写代码来做到这一点应该很容易。修改时间字段返回自Unix纪元以来的毫秒数,您可以通过[]将其转换为python datetime对象

from datetime import datetime, timedelta
 datetime.fromtimestamp(file['modificationTime'] / 1000)

然后是类似的东西

    filtered = [file['name'] for file in adl.ls('/', detail=True) if (datetime.now() - datetime.fromtimestamp(file['modificationTime']/1000)) > timedelta(hours = 4)]

您也可以使用walk而不是l进行递归枚举。

**

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