multithreading - 在追加 blob 的 csv 文件顶部添加标题
问题描述
我正在 Azure 数据工厂中创建一个管道,在其中我使用函数应用程序作为活动之一来转换数据并以 csv 格式存储在附加 blob 容器中。因为我已经在 for 循环中进行了 50 个批次,所以我的函数应用程序要处理 50 次每个订单的数据。我使用以下逻辑在 csv 文件中附加标题。
//首先我根据业务逻辑创建文件 // //csveventcontent 是我的源数据 //
var dateAndTime = DateTime.Now.AddDays(-1);
string FileDate = dateAndTime.ToString("ddMMyyyy");
string FileName = _config.ContainerName + FileDate + ".csv";
StringBuilder csveventcontent = new StringBuilder();
OrderEventService obj = new OrderEventService();
//现在我正在检查今天的文件是否存在,如果不存在,我们创建它。//
if (await appBlob.ExistsAsync() == false)
{
await appBlob.CreateOrReplaceAsync(); //CreateOrReplace();
//Append Header
csveventcontent.AppendLine(obj.GetHeader());
}
现在的问题是标题在 csv 文件中附加了很多次。有时它没有附加在顶部。可能是由于 parralel 函数应用程序运行了 50 次。
我如何只能一次将标题固定在顶部。我也尝试过使用数据流和逻辑应用程序,但无法做到。如果可以通过代码处理,我猜会更容易。
解决方案
我想你就在那里。它是导致问题的函数应用程序的并发性。最好的方法是使用队列并一一处理消息。或者您可以使用分布式锁来确保一次只有一个函数写入文件。您可以为此使用 blob 租约。
Lease Blob 操作为写入和删除操作创建和管理 Blob 上的锁。锁定持续时间可以是 15 到 60 秒,也可以是无限的。
参考:租赁 Blob 请求标头
推荐阅读
- python - 使用python pandas将csv列内的值替换为同一列括号内的值
- ubuntu - 多线程使用make时出现Cmake问题
- scala - 如何从数据框中根据索引提取数据
- android - 如何创建具有两行和动态项目宽度的水平回收视图
- python - 继承和循环导入的问题
- matlab - 如何剖析文件路径并保持扩展Matlab
- laravel - 我已经通过 make:auth 生成了用户登录和注册,现在我想更新详细信息
- javascript - 如何在 JavaScript 中向 ContextualWeb 图像搜索 API 发出 GET 请求?
- python - 无法在 Python 中将图像重塑为二维数组
- azure-devops - 如何在 Azure DevOps 的拉取请求中显示构建状态