首页 文章

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

提问于
浏览
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
...

对不起我的英语不好 .

3 回答

  • 0

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

  • 0

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

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

    所以你有两个选择:

    • 将提取器标记为对整个文件进行操作,并在提取器类之前添加以下行:
    [SqlUserDefinedExtractor(AtomicFileProcessing = true)]
    

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

    • 您每行提取一行并使用U-SQL语句(例如,使用窗口函数或自定义REDUCER)将行合并为单行 .
  • 0

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

相关问题