データ レイク分析ジョブを実行していますが、抽出中にエラーが発生します。私は自分のスクリプトで TEXT エクストラクタと独自のエクストラクタを使用しています。スペース文字で区切られた 2 つの列を含むファイルからデータを取得しようとしています。スクリプトをローカルで実行するとすべて正常に動作しますが、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\"無効な\" 行を無視すると、ジョブの結果に影響する可能性があることを考慮してください。
しかし、ファイルをもう一度確認したところ、間違った列数は表示されません。ファイルの分割と配布が正しくないためにエラーが発生する可能性はありますか? 大きなファイルを並行して抽出できることを読みました。下手な英語でごめんなさい。