0

カスタムの並列エクストラクターを作成しようとしましたが、正しく行う方法がわかりません。大きなファイル (250 MB 以上) があり、各行のデータが 4 行に格納されています。1 つのファイルの行には、1 つの列のデータが格納されます。これは、大きなファイルに対して動作する並列エクストラクタを作成することは可能ですか? ファイル分割後、1 行のデータが別のエクステントになると思います。

例:

...
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
...

私の英語でごめんなさい。

4

3 に答える 3

0

既定では、U-SQL エクストラクタは、エクステントと呼ばれる入力ファイルの小さな部分で並列に動作するようにスケール アウトされます。これらのエクステントのサイズは、それぞれ約 250MB です。

現在、ファイルを行構造のファイルとしてアップロードして、行がエクステント境界に整列していることを確認する必要があります (ただし、近い将来、エクステント境界にまたがる行をサポートする予定です)。いずれにせよ、extractor の UDO モデルは、4 つの行がすべて同じ範囲内にあるか、それらにまたがっているかを認識しません。

したがって、次の 2 つのオプションがあります。

  1. エクストラクタ クラスの前に次の行を追加して、エクストラクタがファイル全体で動作していることをマークします。

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)] 
    

    これで、extractor は完全なファイルを認識します。ただし、ファイル処理のスケールアウトは失われます。

  2. 行ごとに 1 行を抽出し、U-SQL ステートメントを使用して (たとえば、ウィンドウ関数またはカスタム REDUCER を使用して) 行を 1 行にマージします。

于 2016-04-07T21:02:02.110 に答える