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

如何将Azure Data Lake Store gen 2文件共享与Azure Databricks连接?

章昊
2023-03-14

我有一个Azure数据湖存储gen 2帐户,启用了分层命名空间。我为该帐户生成了一个SAS令牌,并将数据发送到文件共享(文件服务)中的一个文件夹。现在我想通过Azure Databricks和python访问这些文件。然而,Azure Databricks似乎只能访问文件系统(在gen1中称为Blob容器),而不能访问文件共享。我也未能为文件系统生成SAS令牌。

我希望有一个存储实例,可以生成 SAS 令牌并将其提供给我的客户端,并使用 python 从 Azure 数据砖访问相同的令牌。它是文件系统,文件共享,ADLS gen2还是gen1并不重要,只要它以某种方式工作即可。

我使用以下代码从数据块中访问文件系统:

configs = {"fs.azure.account.auth.type": "OAuth",
           "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
           "fs.azure.account.oauth2.client.id": "my_client_id",
           "fs.azure.account.oauth2.client.secret": "my_client_secret",
           "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/"+"My_tenant_id" +"/oauth2/token",
           "fs.azure.createRemoteFileSystemDuringInitialization": "true"}

dbutils.fs.mount(source = "abfss://"+"my_file_system"+"@"+"my_storage_account"+".dfs.core.windows.net/MyFolder",
                 mount_point = "/mnt/my_mount",
                 extra_configs = configs) 

工作正常,但我无法让它访问文件共享。我有一个SAS令牌,其连接字符串如下:

connection_string = (
    'BlobEndpoint=https://<my_storage>.blob.core.windows.net/;'+
    'QueueEndpoint=https://<my_storage>.queue.core.windows.net/;'+
    'FileEndpoint=https://<my_storage>.file.core.windows.net/;'+
    'TableEndpoint=https://<my_storage>.table.core.windows.net/;'+
    'SharedAccessSignature=sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-09-26T17:12:38Z&st=2019-08-26T09:12:38Z&spr=https&sig=<my_sig>'
)

我设法用它上传东西到文件共享,但不是文件系统。有没有哪种azure存储可以同时被SAS-token和Azure数据块访问?

共有1个答案

严宏朗
2023-03-14

从数据砖连接到 Azure 文件共享的步骤

首先安装Microsoft Azure存储文件共享客户端库的Python使用pip安装在数据库中。https://pypi.org/project/azure-storage-file-share/

安装后,创建存储帐户。然后,您可以从数据砖创建文件共享

from azure.storage.fileshare import ShareClient

share = ShareClient.from_connection_string(conn_str="<connection_string consists of FileEndpoint=myFileEndpoint(https://storageaccountname.file.core.windows.net/);SharedAccessSignature=sasToken>", share_name="<file share name that you want to create>")

share.create_share()

使用这个进一步参考 https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string

通过数据砖将文件上传到文件共享中的代码

from azure.storage.fileshare import ShareFileClient
 
file_client = ShareFileClient.from_connection_string(conn_str="<connection_string consists of FileEndpoint=myFileEndpoint(https://storageaccountname.file.core.windows.net/);SharedAccessSignature=sasToken>", share_name="<your_fileshare_name>", file_path="my_file")
 
with open("./SampleSource.txt", "rb") as source_file:
    file_client.upload_file(source_file)

请参阅此链接以获取更多信息 https://pypi.org/project/azure-storage-file-share/

 类似资料:
  • 长按按钮时,我正在尝试共享声音文件。这是我的代码: 然而,当我长按按钮时,共享菜单出现,但我只能与WhatsApp共享声音。任何其他应用程序都无法运行。(Gmail给了我一条消息,说“不能附加空文件”。声音是.ogg格式的,我试着把它转换成.wav,但它给了我同样的问题。我做错了什么?

  •       进入共享文件,即可查看【共享给我】和【我共享的】的文件。 1)共享给我: 他人文件的共享名单中有我或者通过链接或二维码共享给我的都会统一展示在共享给我列表,方便查看和查找。 2)我共享的: 统一展示由我共享出去的文件,共享文件信息一目了然,不用担心文档共享被遗忘导致的文档泄露风险。

  • 我有一个docker容器运行良好。它在目录中生成一些文件。我需要这些文件做些测试。但当此容器停止时,所有内容都将被删除。所以我需要将这个文件从容器复制到主机。 我有一个python应用程序运行在生成文件的容器中。我需要一些命令或任何方式,通过这些命令,我可以在容器停止时将发送到结尾的主机。 为此,我可以使用命令,我尝试了它,但它给我一个错误,因为没有安装docker。 如何将文件从容器共享到主机?

  • 我不清楚如何通过上下文在Tomcat中建立与Oracle RAC数据库的连接。xml。这种方法对我很有效: 但这是使用连接池吗?我尝试添加,正如https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html建议的那样,神秘的是,随着这一变化,我开始得到: 如果我尝试类型=oracle.jdbc.pool.OracleDataSource和工厂=ora

  • 我正在尝试使用内容提供程序共享我的内部日志文件。我有以下

  • 我正在尝试传递一个位于我的应用程序的res/raw目录中的图像以及共享意图。 我遵循了FileProvider文档中描述的流程,下面是我的代码: Androidanifest.xml 我的活动中的代码: 由于无法访问我在其他应用程序中获取的文件,因此上述操作无效: java.io.FileNotFoundException:FILE_PATH:打开失败: EACCES(权限拒绝) 知道我做错了什么