1

レデューサーのコンストラクターへの引数としてルックアップ ファイルを必要とするカスタム レデューサーを U-SQL で作成しています。問題は、ローカルで実行すると、/data/ ディレクトリの下のプロジェクトに含まれるルックアップ ファイルが見つからないことです。コード スニペットは次のとおりです。

DECLARE @EventType string = @"/data/EventType.csv"; 
...
@red =
REDUCE @filtered
ON id
PRODUCE 
...
USING new USQLApplication1.MyReducer(@EventType);

そして、ここに私が得ているエラーメッセージがあります。解決策が何であれ、ローカルでの実行だけでなく、紺碧のクラウドでも機能することを望みます。ありがとう。

ステップ 1/1 を実行中

未処理の例外: System.Exception: {"diagnosticCode":195887132,"severity":"E rror","component":"RUNTIME","source":"User","errorId":"E_RUNTIME_USER_UNHANDLED_ EXCEPTION_FROM_USER_CODE","message ":"ユーザー タイプ 'USQLApplication1.MyReducer' でメソッド 'Constructor' を呼び出したときに、ユーザー コードから未処理の例外が報告されました","description":"ユーザー コードからの未処理の例外: \"ファイルが見つかりませんでした ' D:\Users\jbfp\Documents\Visual Studio 2015\Projects\USQL Application1\USQLApplication1\bin\Debug\ECB1C361139EE2D8\Script2_2E96CB20AE 368E7B\EventType.csv'.\"

4

2 に答える 2

2

コメントできないので、このように質問を投稿します。

DEPLOY RESOURCE を使用して、ルックアップ ファイルを作業ディレクトリに展開していますか? ファイルは、操作が行われている各頂点に展開する必要があります。したがって、明示的な展開が必要です。ローカル展開にはいくつかの癖があるかもしれませんが、最初にそれを明確にしましょう。

于 2016-01-15T01:50:26.073 に答える
1

チーの答えを拡張します。

U-SQL は、次の 2 つのストア "レイヤー" で動作します (適切な用語がないため)。

  1. グローバルに永続化されたストア レイヤー。主に Azure Data Lake Storage または Windows Azure Blob Store です。
  2. ユーザー定義の関数または演算子を実行する各ノードは、ノードのローカル ファイル システムの作業ディレクトリへのアクセスも提供します。

カスタム コードは、ファイル IO を使用して、グローバルに永続化されたストア レイヤーに直接アクセスできません。代わりに、U-SQL は、明確に定義されたインターフェイスを介して各ノードにファイルの一部を提供する、いわゆる UDO モデルを提供します。

では、ファイルの内容を直接読み取りたい場合、ユーザー コード内のデータ レイクに保存されているファイルやリソースにアクセスするにはどうすればよいでしょうか? ファイルをすべてのノードのローカル作業ディレクトリにコピー (デプロイ) する必要があります。これは、ADDITIONAL_FILEオプション onを使用するか、chi が言及CREATE ASSEMBLYしたDEPLOY RESOURCEステートメントを使用して行われます。

そうは言っても、ローカル実行モードにはこの領域にバグがあるようで、修正済みですが、まだリリースされていません (おそらく月末までにリリースされる予定です)。以前に修正が必要な場合はお知らせください。修正プログラムを展開できるかどうかを確認します。

于 2016-01-15T08:50:09.650 に答える