2

我正在运行数据湖分析作业,在提取过程中出现错误。我在我的脚本中使用 TEXT 提取器和我自己的提取器。我尝试从包含由空格字符分隔的两列的文件中获取数据。当我在本地运行我的脚本时,一切正常,但当我尝试使用我的 DLA 帐户运行脚本时却不行。只有当我尝试从具有数千行(但只有 36 MB 数据)的文件中获取数据时,我才会遇到问题,对于较小的文件,一切也都可以正常工作。我注意到当顶点总数大于提取节点的顶点数时抛出异常。我在使用其他“大”文件(.csv、.tsv)和提取器时遇到了这个问题。有人能告诉我会发生什么吗?

错误信息:

顶点失败触发快速作业中止。顶点失败:SV1_Extract[0][0] 错误:顶点用户代码错误。顶点因快速失败错误而失败

脚本代码:

@result =
EXTRACT s_date string,
        s_time string
FROM @"/Samples/napis.txt"
//USING USQLApplicationTest.ExtractorsFactory.getExtractor();
USING Extractors.Text(delimiter:' ');

OUTPUT @result
TO @"/Out/Napis.log"
USING Outputters.Csv();

后面的代码:

[SqlUserDefinedExtractor(AtomicFileProcessing = true)]
public class MyExtractor : IExtractor
{
    public override IEnumerable<IRow> Extract(IUnstructuredReader input, IUpdatableRow output)
    {
        using (StreamReader sr = new StreamReader(input.BaseStream))
        {
            string line;
            // Read and display lines from the file until the end of 
            // the file is reached.
            while ((line = sr.ReadLine()) != null)
            {
                string[] words = line.Split(' ');
                int i = 0;
                foreach (var c in output.Schema)
                {
                    output.Set<object>(c.Name, words[i]);
                    i++;
                }

                yield return output.AsReadOnly();
            }
        }
    }
}

public static class ExtractorsFactory
{
    public static IExtractor getExtractor()
    {
        return new MyExtractor();
    }
}

部分示例文件:

...
str1 str2
str1 str2
str1 str2
str1 str2
str1 str2
...

在工作资源中,我发现了 jobError 消息:

“输入流中的列数异常。”-“描述”:“第 1 行输入记录中的列数异常。\n预期 2 列 - 处理 1 列中的 1 列。”-“分辨率”:“检查输入错误或使用 \"silent\" 开关忽略输入中过大(过小)大小的行。\n请考虑忽略 \"invalid\" 行可能会影响作业结果。

但我再次检查了文件,并没有看到不正确的列数。该错误是否可能是由不正确的文件拆分和分发引起的?我读到可以并行提取大文件。对不起我的英语不好。

4

1 回答 1

0

在这里回答了同样的问题:https ://social.msdn.microsoft.com/Forums/en-US/822af591-f098-4592-b903-d0dbf7aafb2d/vertex-failure-triggered-quick-job-abort-exception-throw -during-data-extraction?forum=AzureDataLake

概括:

如果您使用“错误”工具上传文件,我们目前遇到大文件的问题,其中行与文件范围边界不对齐。如果您通过 Visual Studio 或通过 Powershell 命令将其作为面向行的文件上传,您应该将其对齐(如果行分隔符是 CR 或 LF)。如果您没有使用“正确”的上传工具,内置提取器将显示您报告的行为,因为它当前假定记录边界与我们将文件拆分为并行处理的范围对齐。我们正在进行一般修复。

如果您在使用 AtomicFileProcessing=true 的自定义提取器中看到类似的错误消息并且应该不受拆分的影响,请将您的工作链接发送给我,以便我可以提交事件并让工程团队审查您的案例。

于 2016-03-23T20:52:23.003 回答