我正在运行数据湖分析工作,在提取过程中我遇到了错误。 我在我的脚本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消息:
“输入流中的意外列数。” - “description”:“第1行输入记录中的意外列数。\ n预计2列 - 处理1列中的1列。” - “分辨率”:“检查输入错误或使用\“silent \”切换忽略输入中的over(under)-sized行。\ n忽略\“invalid \”行可能会影响作业结果。
但是我再次检查了文件,但没有看到错误的列数。是否可能由错误的文件拆分和分发引起错误?我读到大文件可以并行提取。 抱歉我的英语不好。
答案 0 :(得分:0)
要点:
我们目前遇到大文件的问题,如果您使用&#34;错误&#34;上传文件,则该行未与文件范围边界对齐。工具。如果您通过Visual Studio或Powershell命令将其作为面向行的文件上载,则应将其对齐(如果行分隔符为CR或LF)。如果您没有使用&#34;权利&#34;上传工具,内置提取器将显示您报告的行为,因为它当前假定记录边界与我们将文件拆分为并行处理的范围对齐。我们正在努力进行一般性修复。
如果您在使用AtomicFileProcessing = true的自定义提取器上看到类似的错误消息并且应该对分割不敏感,请将您的工作链接发送给我,以便我可以提交事件并让工程团队审核您的案例。