2017-07-01 4 views
-2

Ich habe Scala-Code, wo ich udf benutze, durch udf Ich mache einige Berechnungen und bekomme den Status davon und versuchen, entsprechend zu loggen Ich bin im else-Teil stecken geblieben, wo ich die Log-Nachricht in der Konsole nicht ausdrucken kann.Problem mit udf in scala, ich bin nicht in der Lage, erwartetes Ergebnis zu erhalten

val testRule1 = { (code: Int, type: String, pCode: String) => 

    if (code == 100 && type == "AK") 

    if (pCode != " " && pCode != Nil.toString()) 
     true 
    else 
    { 
     validationMap("validation") = false 
     logger.info("Doing nor stuff") 
     false 
    } 

    else 
     valMap("val") = false 
     logger.info("Doing not stuff") 
     false 
} 


val valRule1Udf = udf(testRule1) 

val valmasterDF = valChildDF.withColumn("valRow", valRule1Udf(valChildDF("TYPE"), valChildDF("P_CODE"))).drop("validatingRowVD") 

Antwort

0

Ihr Code noch nicht kompiliert

  1. gibt es mehrere Klammern fehlen
  2. Sie können keine Variable type genannt haben, das ist ein reserviertes Schlüsselwort
  3. 'AK' ist nit ein Char Dies sollte ein String

    val testRule1 = { (code: Int, typ: String, pCode: String) => 
        if (code == 100 && typ == "AK") { 
        if (pCode != " " && pCode != Nil.toString()) { 
         true 
        } else { 
         validationMap("validation") = false 
         logger.info("Doing nor stuff") 
         false 
        } 
        } else { 
        valMap("val") = false 
        logger.info("Doing not stuff") 
        false 
        } 
    } 
    
  4. sein
+0

danke für Ihre Antwort, nachdem ich Ihre Eingabe in meinem Code folgt, bekomme ich diesen Fehler 'Ausnahme im Thread" main "java.lang.UnsupportedOperationException: Schema für den Typ AnyVal wird nicht unterstützt –

Verwandte Themen