【问题标题】:Bulk files upload to ADLS gen 1批量文件上传到 ADLS gen 1
【发布时间】:2021-02-15 14:04:40
【问题描述】:

是否可以一次尝试将多个文件上传或转换为 adls(批量上传)。如果这不可能,任何可用的并行处理功能??。

我正在寻找 c# 示例。 请指教..

【问题讨论】:

  • 你想知道如何上传目录吗?

标签: c# .net azure-data-lake


【解决方案1】:

如果你想在一个目录上传多个文件,我们可以使用BulkUpload方法实现批量上传。使用方法请参考here

例如

  1. Create a service principal and configure permissions

  2. 代码

string TENANT = "";
            string CLIENTID = "";
            Uri ADL_TOKEN_AUDIENCE = new Uri(@"https://datalake.azure.net/");
            string secret_key = "";

            var adlServiceSettings = ActiveDirectoryServiceSettings.Azure;
            adlServiceSettings.TokenAudience = ADL_TOKEN_AUDIENCE;
            var adlCred = await ApplicationTokenProvider.LoginSilentAsync(TENANT, CLIENTID, secret_key, adlServiceSettings);

            AdlsClient client = AdlsClient.CreateClient("<>.azuredatalakestore.net", adlCred);

但请注意,该方法有局限性。它只能用于一次上传同一目录中的文件,它将上传目录中的整个文件。如果要上传某个目录下的文件或不同目录下的文件,请参考以下代码

static async  Task  Main(string[] args)
        {
            string TENANT = "";
            string CLIENTID = "";
            Uri ADL_TOKEN_AUDIENCE = new Uri(@"https://datalake.azure.net/");
            string secret_key = "";

            var adlServiceSettings = ActiveDirectoryServiceSettings.Azure;
            adlServiceSettings.TokenAudience = ADL_TOKEN_AUDIENCE;
            var adlCred = await ApplicationTokenProvider.LoginSilentAsync(TENANT, CLIENTID, secret_key, adlServiceSettings);

            AdlsClient client = AdlsClient.CreateClient("<>.azuredatalakestore.net", adlCred);


            string[] filePaths = { };

            int count = 0;
            var tasks = new Queue<Task>();

            foreach (string filePath in filePaths)
            {
                
                var fileName = "";
                // Add the upload task to the queue
                tasks.Enqueue(uplaodFile(client, filePath, fileName));
                count++;
            }

            // Run all the tasks asynchronously.
            await Task.WhenAll(tasks);


        }

        private static async  Task uplaodFile(AdlsClient client, string filePath, string fileName)
        {
            using (var createStream = client.CreateFile(fileName, IfExists.Overwrite))
            {
                using (var fileStrem = File.OpenRead(filePath))
                {

                    await fileStrem.CopyToAsync(createStream);
                }
            }
        }

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 2018-03-20
    • 2020-01-19
    • 1970-01-01
    • 2021-10-20
    • 2020-07-25
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多