none
エラーについて RRS feed

  • 質問

  • 只今、azureのMachineLearnningを使っております。

    そこで、学習して生成した分類器モデルを、web apii として公開し、発行された、apikeyとapiURLを用いて、javaのプログラム(公開されているサンプルコードを利用)により、外部からAPIを実行しようとしたところ、

    javaに下記のエラーがで表示されました。

    java.io.FileNotFoundException: 2 (指定されたファイルが見つかりません。)
    java.io.FileNotFoundException: 2 (指定されたファイルが見つかりません。)
    java.lang.IllegalArgumentException: Source string may not be null

    お手数ですが、解決法を教えていただけますでしょうか。

    サンプルコードのURL

    https://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-consume-web-services/

    2016年8月31日 5:30

回答

  • こんにちは。

    サンプルコードURLではRRSとBES2種類のサンプルが用意されていますが、
    どちらで試されたのでしょうか。

    FileNotFoundExceptionが表示されたとのことなのでJavaの後者だと仮定して話させていただくと、
    サンプルの実行には2種類のCSV(コンテンツはJSON)が必要だと記載されています。

    その場合、私も手順を追って実行したわけではないのですが、一番可能性としてありそうなのは
    MLのAPIが云々ではなく、JavaのMain関数の最初のほうでエラーで終了している可能性があります。

    また、以下のサンプルコードまで見てみるとプログラム実行時に引数でファイルパスを渡しているようですが、
    現在どのように実行されているのでしょうか。
    ファイルパスがわたっているのか、ファイルの実体が存在するのかそのあたりから確認されては如何ですか。

    https://github.com/nk773/AzureML_BESApp/blob/master/src/azureml_besapp/AzureML_BESApp.java

    • 回答としてマーク 星 睦美 2016年10月17日 2:25
    2016年8月31日 6:17
    モデレータ

すべての返信

  • こんにちは。

    サンプルコードURLではRRSとBES2種類のサンプルが用意されていますが、
    どちらで試されたのでしょうか。

    FileNotFoundExceptionが表示されたとのことなのでJavaの後者だと仮定して話させていただくと、
    サンプルの実行には2種類のCSV(コンテンツはJSON)が必要だと記載されています。

    その場合、私も手順を追って実行したわけではないのですが、一番可能性としてありそうなのは
    MLのAPIが云々ではなく、JavaのMain関数の最初のほうでエラーで終了している可能性があります。

    また、以下のサンプルコードまで見てみるとプログラム実行時に引数でファイルパスを渡しているようですが、
    現在どのように実行されているのでしょうか。
    ファイルパスがわたっているのか、ファイルの実体が存在するのかそのあたりから確認されては如何ですか。

    https://github.com/nk773/AzureML_BESApp/blob/master/src/azureml_besapp/AzureML_BESApp.java

    • 回答としてマーク 星 睦美 2016年10月17日 2:25
    2016年8月31日 6:17
    モデレータ
  • ご回答いただきありがとうございます。

    返信が遅くなりまして、申し訳ございません。

    まずサンプルコードですが、RRSを使用しております。

    実行方法はeclipse上で、「実行構成」で引数を設定しての実行です。

    どうぞ宜しくお願い致します。


    2016年9月5日 4:13
  • Eclipse使ってるのであればデバッグ実行で詳細な原因を調べてください。

    readJsonメソッドに渡されている引数は存在するパスですか?
    おそらく
    readJsonメソッドでFileNotFoundExceptionが発生し、それに伴ってjsonBodyがnullなのでStringEntityコンストラクタでIllegalArgumentExceptionが発生しているのだと思います。

    まずは、指定したパスが存在するパスで、Scannerが正しく生成できているのかから確認してみては如何でしょう。

    2016年9月5日 15:23
    モデレータ
  • ご返信いただきありがとうございます。

    ご指摘いただいた点から、実行構成での、引数を変更したところ、

    ArrayIndexOutOfBoundsException:1というエラーに変化いたしました。

    指定したパスが文字数として抽出され、配列に代入され、
    String jsonFile = args[0];でエラーを起こしているものと思われます。

    どのような対処が必要でしょうか。

    Eclipse及びJAVAは慣れていないため、的外れな質問であれば、申し訳ございません。

    また、前提としてEclipseの実行構成からの引数指定(パスを指定)を実行するという、実行方法はパスの指定方法として正しいのでしょうか…。

    2016年9月6日 3:44
  • 変更前後での引数指定内容をどのように変えたのでしょう。

    実行構成ダイアログでどのような指定を行っているのか、どこにファイルを行っているのかは実行環境によって異なるのでなんとも言えないですが、パスはスペースや全角を含むなど、色々な要員が関連する場合がありますので、Cドライブ直下などシンプルな場所に配置し、権限を付与して試してみては如何でしょうか。

    2016年9月6日 5:56
    モデレータ
  • ご返信いただき、ありがとうございます。

    変更前はパスを指定すべきところに「2」数字が指定されておりました。

    変更後はJsonファイルがあるパスを指定しました。(パスをそのまま書きました)

    また、Cドライブ直下でも同様のArrayIndexOutOfBoundsException:1エラーがでました。


    2016年9月6日 8:28
  • そのエラーはおそらく第二引数が指定されていないために発生しています。
    スペース区切りでJsonのパスを2つ指定してください。

    // first argument is full path with file name of JSON file and
    // second argument is full path with file name of API file that contains API URL and API Key of request response REST API

    第一引数はJsonファイルのフルパス、第二引数はapiファイルのフルパスです。
    以下を参考にソース定義、apiファイルの用意をしてください。
    https://github.com/nk773/AzureML_RRSApp/tree/master/src/azureml_rrsapp

    それでも動作しないのであれば不正な引数を設定している可能性がありますので、
    まずはどういった値を設定しているのか現状をきちんと提示するところからされると宜しいかと思います。

    2016年9月6日 15:39
    モデレータ
  • ご返信いただきありがとうございます。

    ご指示いただいたように、第一引数、第二引数を指定したところ、無事に動作いたしました。

    何度も、ご質問し、またわかりづらい説明で、申し訳ございませんでした。

    丁寧にご対応いただき、本当にありがとうございました。

    2016年9月7日 0:57