我正在尝试对存储在蔚蓝数据湖中的文件执行内存中操作。如果不使用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
感谢您的任何帮助。
注意:
[这个问题最近在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进行递归枚举。
**