通过spark-submit --class在作为.jar执行的应用程序中传递opt参数,并使用现有的上下文

时间:2018-05-08 13:38:57

标签: scala apache-spark spark-submit

我正在编写一个scala项目,我希望将类可以作为jar类从spark-submit执行。 (例如spark-submit --num-executors 6 --class org.project

我的问题如下:

  1. 我想使用用户在执行spark提交时设置的spark-context-configuration,并可选择覆盖一些参数,例如Application name。示例:--inputFile将在spark上下文中传递6个exectors配置字段。

  2. 我希望能够将--verbosespark-submit --num-executors 6 --class org.project --inputFile ./data/mystery.txt等选项参数传递给我的项目,而不会干扰火花参数(可能避免名称重叠)
    示例:"--inputFile ./data/mystery.txt"应将org.project传递给类main val conf = new SparkConf().setAppName("project"); val sc = new SparkContext(conf);方法的args输入。

  3. 我在这些问题上取得的进展如下:

    1. 我跑main 在我的project方法中,
      但我不确定这是否符合预期。

    2. Sparks将这些可选参数视为spark-submit的参数并输出错误。

    3. Note.1:我的java类CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;目前不继承任何其他类。

      注2:我是火花世界的新手,我从基本搜索中找不到相关内容。

1 个答案:

答案 0 :(得分:0)

您必须自己处理参数解析。我们在这里使用Scopt

当您提交作业时,它必须通过对象def main(args: Array[String])输入。使用你最喜欢的参数解析器获取这些args并解析它们,相应地设置sparkConf和SparkSession并启动你的进程。

Spark有这样一个整体想法的例子: https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/mllib/DenseKMeans.scala