数据流活动Azure Data Factory中的并发文件处理

时间:2020-05-19 20:08:38

标签: azure-data-factory

使用控制流时,可以使用GetMetadata活动来检索Blob存储帐户中的文件列表,然后将该列表传递给每个活动,其中Sequential标志为false时以并行方式处理所有文件(并行),直到根据每个循环中定义的活动达到最大批次大小。

但是,当从Microsoft(https://docs.microsoft.com/en-us/azure/data-factory/concepts-data-flow-column-pattern)的以下文章中了解数据流时,它们表示以下内容:

映射数据流将执行得更好 当Source转换遍历多个文件而不是 通过For Each活动循环播放。我们建议使用通配符或 源转换中的文件列表。数据流过程将 通过允许在Spark内部进行循环来更快地执行 簇。有关更多信息,请参见Source中的通配符。 转变。

例如,如果您具有2019年7月以来的数据文件列表,则您 希望在Blob存储中的文件夹中进行处理,下面是一个通配符 可以在您的Source转换中使用。

DateFiles / _201907 .txt

通过使用通配符,您的管道将仅包含一个数据流 活动。这将比对Blob的查找更好 然后使用ForEach使用以下命令存储所有匹配文件的迭代 内部执行数据流活动。

基于此发现,我配置了一个数据流任务,其中的源是文件的blob目录,它不控制循环地处理该目录中的所有文件。但是,我看不到任何在数据流中同时处理文件的选项。但是,我确实看到一个“优化”选项卡,您可以在其中设置分区选项。

此选项是仅用于将单个大文件处理为多个线程,还是控制源指向的目录中并发处理多少个文件?

该文档是否假设将每个控制循环的都设置为“顺序”(我可以看到为什么这样做是正确的,但是很难相信如果它一次在数据流中运行一个文件的话) )?

1 个答案:

答案 0 :(得分:0)

在数据流内部,每个源转换都将读取文件夹或通配符路径中指示的所有文件,并将这些内容存储到内存中的数据帧中以进行处理。

从“优化”选项卡中手动设置分区将指示ADF您希望在Spark内部使用的分区方案。

要单独处理每个文件1x1,请使用管道中的控制流功能。

遍历要处理的每个文件,并通过For Each内的iterator参数将文件名发送到数据流中,并将执行设置为Sequential。