scala—使用spark submit按顺序执行包中的所有对象

j9per5c4  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(410)

我正在寻找一种使用spark submit顺序执行包中所有scala对象的方法。从事etl工作。我有4个scala对象(比如object\u1、object\u2、object\u3和object\u4)都在一个包中,比如etl。然后将这个包导出到一个.jar文件(比如all\u four.jar)
提取-对象1和对象2
转换-对象3
加载-对象4
我知道我可以用下面的spark submit命令执行每个对象

./spark-submit --class etl.x --jars path/to/jar/if/any.jar path/to/exported/jar/all_four.jar arg(0)......arg(n)

其中x表示包中的每个scala对象。
但是,我正在寻找一种只调用包一次的方法,所有对象都将按以下顺序执行:
步骤1-对象1和对象2(提取)可以同时执行,也可以同时执行。它们必须同时完成
步骤2-执行对象3(转换)
步骤3-执行对象4(加载)
有没有一种方法可以用spark submit做到这一点?或者有没有更好更有效的方法来解决这个问题?

oyjwcjzk

oyjwcjzk1#

一种方法是编写 Package 器对象( Execute )它包含步骤1、步骤2和步骤3逻辑,以按顺序调用all。如果您具有源代码访问权限,则可以将此 Package 器对象与这四个对象一起包含。
请找到如下所示的 Package 样品,您可能需要根据您的需要进行修改。

import etl.{Object_1,Object_2,Object_3,Object_4}

object Execute {

    def extract() = {
      // Make use of Object_1 & Object_2 logic here.
    }

    def transform() {
      // Make use of Object_3 logic here.
    }

    def load() {
      // Make use of Object_4 logic here.   
    }

    def main(args: Array[String])  
    {        
       extract()
       transform()
       load()      
    } 

}
./spark-submit \
--class Execute \
--jars path/to/jar/if/any.jar path/to/exported/jar/all_four.jar arg(0)......arg(n)

相关问题