自定义并行提取器 - U-SQL

Custom parallel extractor - U-SQL

我尝试创建一个自定义并行提取器,但我不知道如何正确执行。我有一个大文件(超过 250 MB),其中每一行的数据存储在 4 行中。一个文件行存储一列的数据。是否可以为大文件创建并行提取器?恐怕一行的数据,在文件拆分后会有不同的程度。

示例:

...
Data for first row
Data for first row
Data for first row
Data for first row
Data for second row
Data for second row
Data for second row
Data for second row
...

对不起我的英语。

我认为,您可以使用 U-SQL 顺序而非并行处理此数据。您必须编写一个自定义应用程序来获取 single/multiple 行和 return single/multiple 行。然后,您可以使用 CROSS APPLY 调用它。您可以向 this 应用程序寻求帮助。

U-SQL 默认情况下,提取器会横向扩展以在输入文件的较小部分(称为范围)上并行工作。这些扩展区的大小约为 250MB。

今天,您必须将文件作为行结构文件上传,以确保行与范围边界对齐(尽管我们将在不久的将来提供对跨越范围边界的行的支持)。不管怎样,提取器 UDO 模型都不知道您的 4 行是在同一范围内还是在它们之间。

所以你有两个选择:

  1. 通过在提取器前添加以下行将提取器标记为对整个文件进行操作 class:

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)] 
    

    现在提取器将看到完整的文件。但是你失去了文件处理的规模。

  2. 您每行提取一行并使用 U-SQL 语句(例如,使用 Window 函数或自定义 REDUCER)将这些行合并为一行.

我发现如果我想在 true 上使用 AtomicFileProcessing,我不能使用静态方法在 USING 语句中获取 IExtractor 实现的实例。