gpt4 book ai didi

java - 使用 scala 将应用程序参数传递给 Spark-Submit 时出现问题

转载 作者:行者123 更新时间:2023-12-01 09:37:52 26 4
gpt4 key购买 nike

我对函数式编程还很陌生,并且没有命令式编程背景。在线运行一些基本的 scala/spark 教程,并在通过 Spark-submit 提交 Scala 应用程序时遇到一些困难。

特别是我收到了 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)
}
}
}

要使用spark-submit提交应用程序,我使用:

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)

值得指出的是,如果我删除参数并对日志文件的路径进行硬编码,则应用程序运行良好。真的不知道我在这里缺少什么。任何方向将不胜感激。提前致谢!

最佳答案

您的 Spark-Submit 操作错误。实际的命令是

./spark-submit --class SparkMeApp --master "local[*]" \
example.jar examplefile.txt

仅当存在外部依赖项并且您希望将该 jar 分发给所有执行程序时,您才需要传递 --jars。

如果您启用了 log4j.properties 信息/警告,您可以轻松捕获它。

Warning: Local jar /home/user/Downloads/spark-1.4.0/bin/NetSetup.log does not exist, skipping.

关于java - 使用 scala 将应用程序参数传递给 Spark-Submit 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com