我正在运行数据湖分析作业,在提取过程中出现错误。我在我的脚本中使用 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\" 行可能会影响作业结果。
但我再次检查了文件,并没有看到不正确的列数。该错误是否可能是由不正确的文件拆分和分发引起的?我读到可以并行提取大文件。对不起我的英语不好。