我有600个grib(二进制)格式的文件,我需要转换为csv格式。最初,它是一次性转换,但稍后我们将收到每日文件,因此我已经实现了在数据工厂中运行的自定义C#活动。当我第一次使用带有D14 v2 VM的批处理帐户运行此活动时,它一次转换一个文件,每个文件需要20-25分钟才能转换。这加起来超过一周,如果我们因某些原因需要重新运行转换,这太长了。有没有什么好方法可以并行化这种转换?
输入和输出文件都存储在两个单独容器中的blob存储中。输入文件各约为50 Mb,输出文件各约为2 Gb。数据工厂活动转换作业开始时在输入容器中找到的所有文件。
我尝试在自定义活动中添加一个线程池,为每个输入文件创建一个单独的线程来并行化工作。适用于约。 10个文件,转换大约需要40分钟,但是当同时添加更多输入文件时,数据工厂作业以奇怪的错误结束,而system.log文件中没有任何异常信息:
活动时出错:已退出流程代码:' -532462766'。异常消息:'来自HRESULT的异常:0xE0434352'。
答案 0 :(得分:0)
我建议您使用Azure Data Lake来实现所需的可扩展性。假设文件有一些结构编写一些USQL来粉碎它们,组合和转换它们会很好用,并且比使用批量服务计算的ADF自定义活动更容易实现。
您当然需要在Data Lake存储中使用文件而不是blob存储来实现最佳性能。 但如果您必须通过isb网址,则可以将blob存储用作数据湖分析服务的数据源。
最后,您可以从数据工厂调用USQL并指定活动的并行度。此外,可能有一个USQL存储过程,您将文件名集合传递给。这也可以从数据工厂处理。
查看此帖子:https://www.purplefrogsystems.com/paul/2017/02/passing-parameters-to-u-sql-from-azure-data-factory/
希望这有帮助。
聚苯乙烯。回应上述评论。不要复制和粘贴JSON!育!将PowerShell与某些元数据一起使用,以使用ADF cmdlet输出数据工厂管道。