【问题标题】:overloaded method value apply with alternatives error in scala重载的方法值适用于scala中的替代错误
【发布时间】:2020-06-06 14:00:18
【问题描述】:

我有以下代码作为胶水工作的一部分:

def forTxnType(dynamicRecord: DynamicRecord): DynamicRecord = {
val s = dynamicRecord.getField("transactiondirection")
val s_out = dynamicRecord.getField("transfermechanism")
val s_in = dynamicRecord.getField("terminalid").mkString("")
val m_Wire = List("FWWRD", "WTPCT", "WTROL")
val m_ACH = List("9CACH","9DACH","WTB19","WTB20","WTCN0","WTCN9","WTFP0","WTLEG","WTM20","WTP20","WTPMD","WTSNR","WTSPN","WTT20","WTTEF") 
val m_ACAT = List("NSTFR","TSTFR","NSADJ") 
val m_Check = List("MGRCF","WTFEE","WTFP0","WTLEG","WTM20","WTP20","WTROL","WTSPN","WTTEF","Z9CHK") 
val m_CashJournal = List("AUDEP","AUFEE","CSCSG","WTB20","WTBYP","WTCN0","WTCN9")

val etype = if(s.equals("Outgoing")){
    s_out
} else {
if(m_Check.contains(s_in)){
        "Check"
    }
    else if(m_CashJournal.contains(s_in)){
        "Cash_journal"
    }
    else if(m_Wire.contains(s_in)){
        "Wire"
    }
    else if(m_ACH.contains(s_in)){
        "ACH"
    }
    else if(m_ACAT.contains(s_in)){
        "ACAT"
    }
    else{
        "NoType"
    }
   }

dynamicRecord.addField("transactionType", StringNode(etype))
dynamicRecord
}

它在行上给出以下错误 - dynamicRecord.addField("transactionType", StringNode(etype)):

重载的方法值适用于替代方法

【问题讨论】:

  • 如果以下解决方案有帮助,您能否接受+投票:)

标签: scala function apache-spark compiler-errors aws-glue


【解决方案1】:

def getField( path : String ) : Option[Any] 的返回类型为Option

StringNode 只会获取String 类型的数据,但您的etype 数据类型是Any 类型,因此您会收到错误overloaded method value apply with alternatives 来解决此问题,将s_out 更改为@987654329 @ 在你的 if 块中。

检查下面的代码。

val etype = if(s.equals("Outgoing")){
    s_out.get // Add .get here
} else {...}

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多