【发布时间】:2021-02-15 14:04:40
【问题描述】:
是否可以一次尝试将多个文件上传或转换为 adls(批量上传)。如果这不可能,任何可用的并行处理功能??。
我正在寻找 c# 示例。 请指教..
【问题讨论】:
-
你想知道如何上传目录吗?
标签: c# .net azure-data-lake
是否可以一次尝试将多个文件上传或转换为 adls(批量上传)。如果这不可能,任何可用的并行处理功能??。
我正在寻找 c# 示例。 请指教..
【问题讨论】:
标签: c# .net azure-data-lake
如果你想在一个目录上传多个文件,我们可以使用BulkUpload方法实现批量上传。使用方法请参考here
例如
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);
}
}
}
【讨论】: