Scala_scopt 解析命令行参数

一、说明

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

2、操作步骤

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

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

(3)解析命令行参数;

二、操作演示

依赖:

<dependency>
     <groupId>com.github.scopt</groupId>
     <artifactId>scopt_2.11</artifactId>
     <version>3.7.0</version>
</dependency>

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("<name>")
        .action((x, c) => c.copy(name = x))
      opt[Int]("age")
        .text("<age>")
        .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 <value>  <name>
  --age <value>   <age>
  --help          prints this usage text

           this is notic

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郝少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值