首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Azure数据湖存储Gen2中访问事件中心捕获的数据

如何在Azure数据湖存储Gen2中访问事件中心捕获的数据
EN

Stack Overflow用户
提问于 2020-04-07 13:38:46
回答 2查看 739关注 0票数 0

我正在使用connection_string访问Azure数据湖Gen2存储器,其中许多Avro文件由事件集线器捕获存储在典型的目录结构中,其中包含按年/月/日/小时/分钟命名的文件夹。我正在使用azure.storage.filedatalake包。

首先,我使用以下方法获得Data服务客户端:

datalake_service_client = DataLakeServiceClient.from_connection_string(connection_string)

然后我把湖里的文件系统:

代码语言:javascript
复制
file_systems = datalake_service_client.list_file_systems()
for file_system in file_systems:
    print(file_system.name)

在这种情况下,只有一个文件系统,称为"datalake1“。此时,我想访问我希望在其中找到的所有Avro文件。首先,我试图获得一个文件系统客户端:

datalake_service_client.get_file_system_client("datalake1") = file_system_client

然后使用get_paths方法:

file_system_client.get_paths()

它返回一个迭代器(azure.core.paging.ItemPaged对象),但是从这里我无法看到文件夹和文件。我尝试了一个简单的列表理解,比如[x.name for x in file_system_client.get_paths()],但是我得到了错误StorageErrorException:返回了一个无效的状态‘指定的容器不存在’。

知道如何按照这个过程访问Avro文件吗?

编辑:我使用的是天青-存储-文件-数据集版本12.0.0。下面是代码的截图:

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-08 02:25:53

更新:

用您的代码测试它:

原始答案:

调用get_paths()方法之后,可以使用is_directory属性来确定它是目录还是文件。如果它是一个文件,那么你可以用它做一些事情。

示例代码(在这个示例中,我只打印出.avro文件路径)。请随时修改代码以满足您的需要):

代码语言:javascript
复制
#other code
paths = file_system_client.get_paths()

for path in paths:
    #determine if it is a directory or a file
    if not path.is_directory:
        #here, just print out the file name.
        print(path.name + '\n')
        #you can do other operations here.

测试结果:

票数 1
EN

Stack Overflow用户

发布于 2020-04-10 18:24:40

问题是连接字符串。我又试了一次,但是把它从Azure门户的“访问密钥”刀片上取下来,现在它运转良好。我设法正确地运行了get_paths()等。前面的连接字符串来自Storage,它对应于从“共享访问签名”刀片检索的连接字符串。@MartinJaffer (MSDN)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61081349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档