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

时间:2016-04-01 13:53:54

标签: azure azure-data-lake 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
...

抱歉我的英文。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

所以你有两个选择:

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

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)] 
    

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

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

答案 2 :(得分:0)

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