Scala_scopt 解析命令行参数

一、说明

1、在做spark项目时,在命令行提交任务时,可以利用 --参数名:参数进行动态传参;

2、操作步骤

(1)首先写个表示配置的case class类,里面为每一个参数指定默认值;

(2)Config 配置对象作为参数传递给 action 回调;

(3)解析命令行参数;

二、操作演示

依赖:


     com.github.scopt
     scopt_2.11
     3.7.0

1、代码

package com.cn

import org.apache.spark.{SparkConf, SparkContext}
import scopt.OptionParser

object Scopt {

  case class Config(name: String = "zhangSan", age: Int = 23)

  def main(args: Array[String]): Unit = {
    val config: Config = new Config()
    val parser = new OptionParser[Config]("ScoptTest") {
      head("ScoptTest01")
      opt[String]("name")
        .text("")
        .action((x, c) => c.copy(name = x))
      opt[Int]("age")
        .text("")
        .action((x, c) => c.copy(age = x))
      help("help").text("prints this usage text")
      note(
        """
           this is notic
        """.stripMargin)
    }
    parser.parse(args, config) match {
      case Some(params) => runProgram(params)
      case _ => sys.exit(1)
    }

    def runProgram(config: Config) {
      val conf = new SparkConf().setAppName("scopt").setMaster("local[1]")
      val sc = new SparkContext(conf)
      sc.setLogLevel("WARN")
      println("name is:" + config.name + ",age is:" + config.age)
    }
  }
}

2、打包演示

(1)命令行不传参数

[root@master bin]# ./spark-submit --master 'local'  --class com.cn.Scopt /home/test/spark/sparkLearn-1.0.0.jar

结果:

name is:zhangSan,age is:23

(2)命令行传入一个参数

[root@master bin]# ./spark-submit --master 'local'  --class com.cn.Scopt /home/test/spark/sparkLearn-1.0.0.jar --name wangWu

结果:

name is:wangWu,age is:23

(3)命令行传入全参数

[root@master bin]# ./spark-submit --master 'local'  --class com.cn.Scopt /home/test/spark/sparkLearn-1.0.0.jar --name wangWu --age 20

结果:

name is:wangWu,age is:20

注意:如果提交命令出现某个参数无法识别(代码又对此参数配置正确),可以将 --此参数 换下位置,比如放到最上面; 

(4)使用help查看参数

[root@master bin]# ./spark-submit --master 'local'  --class com.cn.Scopt /home/test/spark/sparkLearn-1.0.0.jar --help

结果:

ScoptTest01
Usage: ScoptTest [options]

  --name   
  --age    
  --help          prints this usage text

           this is notic

你可能感兴趣的:(Spark技术经验,大数据,scopt,spark,scala)