【问题标题】:Passing Arguments in Apache Spark在 Apache Spark 中传递参数
【发布时间】:2018-09-03 18:20:29
【问题描述】:

我在本地机器上运行这段代码:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/Users/username/Spark/README.md"
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

我想运行该程序,但在不同的文件上运行它——它目前只在 README.md 上运行。运行 Spark 时如何传递另一个文件的文件路径(或与此相关的任何其他参数?)。例如,我想将contains("a") 更改为另一个字母。

我让程序运行:

$ YOUR_SPARK_HOME/bin/spark-submit \
  --class "SimpleApp" \
  --master local[4] \
  target/scala-2.10/simple-project_2.10-1.0.jar

谢谢!

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    当你在

    中设置你的 main
     def main(args: Array[String]) {
    

    您正在准备您的 main 接受 .jar 行之后的任何内容作为参数。它会为你创建一个名为“args”的数组。然后像往常一样使用 args[n] 访问它们。

    检查你的参数的类型和/或格式可能会很好,通常是你以外的任何人可能会运行它。

    所以不要设置

    val logFile = "String here"
    

    设置

    val logFile = args(0)
    

    然后将文件作为第一个参数传递。查看 spark-submit docs 了解更多信息,但是,您基本上只需在下一行输入即可。

    【讨论】:

    • suiterdev 你的意思是 args(0) 吗?
    • 不,我指的是方括号。这是 Scala 中的数组索引。自从我写这篇文章以来,Scala 中可能发生了一些变化,但在撰写本文时,这种形式的意思是“名为 'logfile' 的 val 应该假定其内容为名为 'args' 的数组中第一项的内容,这位于索引位置编号为零。”
    • 实际上@user1050325 原来我的意思是括号,只是没有意识到 - 当时我可能正在考虑使用 Java。感谢您的关注,我会更新答案。
    • @suiterdev 如何将不同的参数类型(字符串、整数、双精度)传递给def main(args: Array[String]) { 数组以避免“类型不匹配”错误?谢谢!
    【解决方案2】:

    用下面的替换 logFile 变量的值

    val logFile=args(0)

    并且,在运行 spark-submit 时在参数中传递实际值,如下所示-

    spark-submit --class "SimpleApp" --master localtarget/scala-2.10/simpleapp_2.10-1.0.jar "/Users/username/Spark/README.md"

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 2020-05-19
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多