Spark参数解析之MasterArguments

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Spark参数解析之MasterArguments

前言

Spark参数解析的代码我郁闷了好一阵子,后面终于在快学Scala中看到的这种写法,记录一下。

关键源码

MasterArguments参数解析的时候有这么一段:

 private def parse(args: List[String]): Unit = args match {
    case ("--ip" | "-i") :: value :: tail =>
      Utils.checkHost(value)
      host = value
      parse(tail)

    case ("--host" | "-h") :: value :: tail =>
      Utils.checkHost(value)
      host = value
      parse(tail)

    case ("--port" | "-p") :: IntParam(value) :: tail =>
      port = value
      parse(tail)

    case "--webui-port" :: IntParam(value) :: tail =>
      webUiPort = value
      parse(tail)

    case ("--properties-file") :: value :: tail =>
      propertiesFile = value
      parse(tail)

    case ("--help") :: tail =>
      printUsageAndExit(0)

    case Nil => // No-op

    case _ =>
      printUsageAndExit(1)
  }

这个功能我们其实是知道,就是我们在启动Master的时候会传入类似

-i HOST, --ip HOST 这种参数,然后会解析,但是那个case语法有点奇怪,我把这部分功能单独抽取出来了:

 object ParamParser {
  var tableName:String=_
  var memory:String=_
  def main(args: Array[String]): Unit = {
    val list=List("--table","temp.test_table","--memory","4G")
    parse(list)
    print(tableName)
      print(memory)
  }

  //实际就是匹配特定的一段
  def parse(list:List[String]):Unit= list match {
    case "--table" :: value :: tail =>{
       tableName=value
      parse(tail)
    }
    case "--memory" :: value :: tail=>{
      memory=value;
    }
    case Nil=>
  }
}

这个语法关键的部分其实是scala中list的模式匹配,

case “–table” :: value :: tail 语义其实就是匹配这种结构

“–table”::接下来的元素::其他元素,tail就是其他的意思,这种结构连到一起就是匹配上的,所以参数里面的写法"–table","temp.test_table"会被匹配上,value则取值就是temp.test_table.

总结

这个地方其实还是对scala的语法上面掌握不够导致的,scala其实里头很多很骚气的写法,学习还需要加深才行!

目录
相关文章
|
1月前
|
安全
BOSHIDA DC电源模块的基本参数解析
BOSHIDA DC电源模块的基本参数解析
BOSHIDA  DC电源模块的基本参数解析
|
1月前
|
SQL 存储 NoSQL
实时计算 Flink版产品使用合集之使用ParameterTool.fromArgs(args)解析参数为null,该怎么处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
存储 缓存 监控
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
|
1天前
|
网络协议 Linux 网络安全
Iptables深度解析:四表五链与动作参数
Iptables深度解析:四表五链与动作参数
7 0
|
1月前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在开发环境中配置MaxCompute参数进行调度,但参数解析不出来,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
1月前
|
存储 开发者 Python
Python中的argparse模块:命令行参数解析的利器
Python中的argparse模块:命令行参数解析的利器
26 2
|
1月前
|
分布式计算 DataWorks 调度
DataWorks操作报错合集之DataWorks配置参数在开发环境进行调度,参数解析不出来,收到了 "Table does not exist" 的错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
39 0
|
1月前
|
JSON 前端开发 Java
SpringBoot之JSON参数,路径参数的详细解析
SpringBoot之JSON参数,路径参数的详细解析
31 0
|
7天前
|
机器学习/深度学习 缓存 算法
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
|
9天前
|
XML Java 数据格式
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
21 3

推荐镜像

更多