Оптимизация Spark Scala DataFrame - PullRequest
       21

Оптимизация Spark Scala DataFrame

0 голосов
/ 17 октября 2018

Привет, мне нужна помощь, пожалуйста, как оптимизировать этот код, чтобы все функции использовали одно и то же условие в цикле с if подробнее , как использовать с Column Spark Dataframe scala с while

//This function return codcat 
    def mdp_codcat(bRef: Broadcast[Array[RefRglSDC]]) =  udf((sensop: String, cdopcz: String, lieccp:String, qualib: String) =>
      {
        var codcat ="NOT_CATEGORIZED"
        var matchRule = false
        var i = 0
        while (i < bRef.value.size && !matchRule) {
          if ((bRef.value(i).sensop.isEmpty || bRef.value(i).sensop.equals(sensop))
            && (bRef.value(i).cdopcz.isEmpty || Lib.matchCdopcz(cdopcz.substring(1).toInt.toString, bRef.value(i).cdopcz))
            && (bRef.value(i).libope.isEmpty || Lib.matchRule(lieccp, bRef.value(i).libope))
            && (bRef.value(i).qualib.isEmpty || Lib.matchRule(qualib, bRef.value(i).qualib))) {
            matchRule = true
            codcat = bRef.value(i).codcat
          }
          i += 1
        }
        codcat
      })

Функция secondde такая же, но этот возврат idregl

 def mdp_idregl(bRef: Broadcast[Array[RefRglSDC]]) =  udf((sensop: String, cdopcz: String, lieccp:String, qualib: String) =>
  {
    var idregl ="-1"
    var matchRule = false
    var i = 0
    while (i < bRef.value.size && !matchRule) {
      if ((bRef.value(i).sensop.isEmpty || bRef.value(i).sensop.equals(sensop))
        && (bRef.value(i).cdopcz.isEmpty || Lib.matchCdopcz(cdopcz.substring(1).toInt.toString, bRef.value(i).cdopcz))
        && (bRef.value(i).libope.isEmpty || Lib.matchRule(lieccp, bRef.value(i).libope))
        && (bRef.value(i).qualib.isEmpty || Lib.matchRule(qualib, bRef.value(i).qualib))) {
        matchRule = true
        idregl = bRef.value(i).idregl.toString
      }
      i += 1
    }
    idregl
  })

Я вызываю эту функцию с помощью withColumn

df.withColumn("mdp_codcat", mdp_codcat(bRef)($"signe",$"cdopcz",$"lib_ope",$"qualif_lib_ope"))

и

df.withColumn("mdp_idregl", mdp_idregl(bRef)($"signe",$"cdopcz",$"lib_ope",$"qualif_lib_ope"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...