저는 함수형 프로그래밍에 익숙하지 않으며 명령형 프로그래밍 배경이 없습니다. 기본적인 스칼라/스파크 튜토리얼을 온라인으로 실행하고 스파크 제출을 통해 스칼라 애플리케이션을 제출하는 데 어려움이 있습니다.스칼라로 spark-submit에 응용 프로그램 인수를 전달하는 데 문제가 있습니다.
특히 java.lang.ArrayIndexOutOfBounds 0 예외가 발생했습니다.이 예외는 내가 조사한 결과 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)
}
}
}
를 사용하여 응용 프로그램을 제출하려면 내가 사용하는 불꽃을 제출 : NetSetup.log 내가 신청서를 제출하고있어 곳과 같은 디렉토리에
spark-submit --class SparkMeApp --master "local[*]" --jars target\scala-2.10\firstsparkapplication_2.10-1.0.jar NetSetup.log
... . 응용 프로그램의 출력은 단순히 : 0 나는 시도/캐치를 제거하는 경우, 출력은 다음과 같습니다
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