[英]how to apply elasticsearch using python on files in azure-data-lake?
[英]Can azure data lake files be filtered based on Last Modified time using azure python sdk?
我正在尝试对存储在 azure datalake 中的文件执行内存操作。 如果不使用 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
任何帮助表示赞赏。
笔记:
最近, akharit在 GitHub 中回答了这个问题。 我在下面提供他的答案,可以解决我的要求。
**adls sdk 本身没有任何内置功能,因为没有服务器端 api 将仅返回在过去 4 小时内修改的文件。 在获得所有条目的列表后,编写代码应该很容易做到这一点。 修改时间字段返回自 unix 纪元以来的毫秒数,您可以将其转换为 python 日期时间 object
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 而不是 ls 进行递归枚举。
**
根据下面的代码,您可以找到容器级别的目录和文件名以及文件属性,包括 last_modified 数据。 因此,您可以根据 last_modified 日期控制文件。
from pyspark.sql.functions import col
from azure.storage.blob import BlockBlobService
from datetime import datetime
block_blob_service = BlockBlobService(account_name='acccount_name', account_key='account-key')
container_name ='Contaniner_name'
second_conatainer_name ='Contaniner_name_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')
myfile = open('/dbfs/adlsaudit/auditfiles2', 'w')
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
# print("\t Recovery: " + blob.name,":" +str(length),":" + str(last_modified))
line = container_name+'|'+second_conatainer_name+'|'+blob.name+'|'+ str(file_size) +'|'+str(last_modified)+'|'+str(report_time)
myfile.write(line+'\n')
myfile.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.