0

我尝试创建一个自定义并行提取器,但我不知道如何正确执行。我有一个大文件(超过 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
...

对不起我的英语不好。

4

3 回答 3

0

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

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

所以你有两个选择:

  1. 将提取器标记为对整个文件进行操作,并在提取器类之前添加以下行:

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)] 
    

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

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

于 2016-04-07T21:02:02.110 回答
0

我认为,您可以使用 U-SQL 顺序而不是并行处理这些数据。您必须编写一个自定义应用程序来获取单/多行并返回单/多行。然后,您可以使用 CROSS APPLY 调用它。您可以从这个应用程序中获得帮助。

于 2016-04-06T07:41:49.793 回答
0

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

于 2016-08-09T16:51:35.957 回答