如何在Scala Spark中的Param [Array [Any]运行时告诉Param [Any]

时间:2017-12-10 19:17:07

标签: scala apache-spark apache-spark-ml

我正在编写一段Scala代码,可以为我构建一个来自配置文件的Spark-ML管道。我希望能够实例化扩展 Params 类(即 PipelineStage )和 Pipeline 本身的对象。

pipeline {
    class = "org.apache.spark.ml.Pipeline"
    stages = ["pca", "vectorAssembler"]
    vectorAssembler {
        class = "org.apache.spark.ml.feature.VectorAssembler"
        inputCols = ["pcacol","col1","col2","col3"]
        outputCol = "features"
    }
    pca {
    ....
    }
}

目前我通过调用 Params#set 方法实例化类并设置参数。 我希望解析器尽可能通用,我希望能够设置任何类型的参数,包括privitives,基元数组和对象数组(例如 Pipeline#stages )。 问题是我无法区分设定者的类型参数。我查看所需参数的类型并将配置值转换为此类型。

 param match {
      case p: DoubleArrayParam =>
        ...
      case p: IntArrayParam =>
        ...
      case p: StringArrayParam =>
        ...
      case p: Param[Array[Params]] =>
        ...
      case p =>
        ...

在运行时 Param [String] Param [Array [String]] Param [Array [Params]] 是相同的。对于字符串数组和基元数组,有单独的类, DoubleArrayParam IntArrayParam StringArrayParam ,但我无法找到方法从简单的 String 中告诉 Params 数组,因为Param [Any]匹配上面代码中的倒数第二个案例。

我遇到的唯一解决方案是分别解析 Pipeline 配置,但这意味着我将来可能会遇到其他特定情况。

0 个答案:

没有答案