私は関数型プログラミングにはかなり新しく、プログラミングの基本的なバックグラウンドはありません。いくつかの基本的なスカラ/スパークチュートリアルをオンラインで実行し、spark-submitを介してScalaアプリケーションを送信するのにいくつかの問題があります。スカラーでspark-submitにアプリケーション引数を渡すのに問題があります
特に私はjava.lang.ArrayIndexOutOfBounds 0 Exceptionを取得しています。これは、私が調査したところで、位置0の配列要素が原因であることがわかりました。それをさらに調べると、メインアプリケーションが実際に実行時に引数を取り上げているかどうかを示す基本的なデバッグがあることがわかりました。これはそうではありませんでした。ここでは、コードは次のようになります。
import org.apache.spark.{SparkConf, SparkContext}
object SparkMeApp {
def main(args: Array[String]) {
try {
//program works fine if path to file is hardcoded
//val logfile = "C:\\Users\\garveyj\\Desktop\\NetSetup.log"
val logfile = args(0)
val conf = new SparkConf().setAppName("SparkMe Application").setMaster("local[*]")
val sc = new SparkContext(conf)
val logdata = sc.textFile(logfile, 2).cache()
val numFound = logdata.filter(line => line.contains("found")).count()
val numData = logdata.filter(line => line.contains("data")).count()
println("")
println("Lines with found: %s, Lines with data: %s".format(numFound, numData))
println("")
}
catch {
case aoub: ArrayIndexOutOfBoundsException => println(args.length)
}
}
}
私が使用火花提出使用してアプリケーションを送信するには:
spark-submit --class SparkMeApp --master "local[*]" --jars target\scala-2.10\firstsparkapplication_2.10-1.0.jar NetSetup.log
... NetSetup.logは、私がアプリケーションを提出するよどこと同じディレクトリにある場合。アプリケーションの出力は単純です:0.私はのtry/catchを削除した場合、出力は次のとおりです。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at SparkMeApp$.main(SparkMeApp.scala:12)
at SparkMeApp.main(SparkMeApp.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
私は、引数とハードコードへのパスを削除する場合は、アプリケーションが正常に動作することを指摘する価値がありますログファイル。私がここで紛失しているものを本当に知りません。いずれの方向にも感謝します。前もって感謝します!
脚注:コマンドラインでファイル名を一重引用符で囲んでみましたが、無駄です。 – Jonathan