如何从applications.properties(配置文件)调用Spark函数(带参数)?

因此,我有一个名为 application.properties 的类型安全配置文件,其中包含某些值,例如:

dev.execution.mode = local
dev.input.base.dir = /Users/debaprc/Documents/QualityCheck/Data
dev.schema.lis = asin StringType,subs_activity_date DateType,marketplace_id DecimalType

我在 Spark 代码中将这些值用作字符串,例如:

def main(args: Array[String]): Unit = {
    val props = ConfigFactory.load()
    val envProps = props.getconfig("dev")

    val spark = SparkSession.builder.appName("DataQualityCheckSession")
      .config("spark.master",envProps.getString("execution.mode"))
      .getOrCreate()

现在我在我的 spark 代码中定义了某些函数(func1、func2 等...)。我想在我的 application.properties 文件中指定要调用的函数以及相应的参数。像这样:

dev.functions.lis = func1,func2,func3
dev.func1.arg1.lis = arg1,arg2
dev.func2.arg1.lis = arg3,arg4,arg5
dev.func2.arg2.lis = arg6,arg7,arg8
dev.func3.arg1.lis = arg9,arg10,arg11,arg12

现在,一旦我指定了这些,我在 Spark 中做什么,用提供的参数调用函数?还是我需要以不同的方式指定函数和参数?

w24667266 回答:如何从applications.properties(配置文件)调用Spark函数(带参数)?

我同意@cchantep 的做法似乎是错误的。但是,如果您仍然想做类似的事情,我会将属性文件中的函数名称与代码中的实际函数/方法分离。

我已经试过了,效果很好:

def function1(args: String): Unit = {
  println(s"func1 args: $args")
}

def function2(args: String): Unit = {
  println(s"func2 args: $args")
}

val functionMapper: Map[String,String => Unit] = Map(
  "func1" -> function1,"func2" -> function2
)

val args = "arg1,arg2"

functionMapper("func1")(args)
functionMapper("func2")(args)

输出:

func1 args: arg1,arg2
func2 args: arg1,arg2

编辑:更简单的输出示例方法。

本文链接:https://www.f2er.com/710074.html

大家都在问