classcastexception

blpfk2vs  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(343)

当我尝试输入cast时,我得到了classcastexception。spark提交代码如下。
输入行:“2017-02-25 14:39:09123 for:po1028、pd1028、产品pd1028在sap数据库中不存在。”

println("Print each sap rdd " + line.saplogMsg)                    
                                    if (line.saplogMsg.contains("For:")) {
                                      startTime = line.loggedat
                                      println("startTime : " + startTime)
                                      val customFields = line.saplogMsg.split(",");
                                      TransactionId = customFields(0).split(":")(1).trim()
                                      println("TransactionId : " + TransactionId)
                                      customField2 = customFields(1)
                                      println("customField2 : " + customField2)
                                      appln = "SAP"
                                      layer = "APP"
                                      errorMsg = line.saplogMsg.split(",")(2)
                                      println("errorMsg : " + errorMsg)
                                    }
    if (line.saplogMsg.contains("doesn't exist")) {
                                      endTime = line.loggedat
                                      println("endTime "+endTime)
                                      status = "failed"              
                                      val purchaseOrderOld:PurchaseOrder = mapPO.get(TransactionId).asInstanceOf[PurchaseOrder]
                                      println("SAP Transaction Id : " + purchaseOrderOld)     
                                  purchaseOrderOld.startTime = startTime
                                      purchaseOrderOld.TransactionId=TransactionId
                                      purchaseOrderOld.customField2=customField2
                                      purchaseOrderOld.application=appln
                                      purchaseOrderOld.layer=layer
                                      purchaseOrderOld.errorMsg=errorMsg
                                      purchaseOrderOld.endTime=endTime
                                      purchaseOrderOld.status=status
                                }
     package logMonitor                        
     case class PurchaseOrder(                        
                          var startTime: java.sql.Date,
                          var endTime: java.sql.Date,
                          var TransactionId: String,
                          var customField1: String,
                          var customField2: String,
                          var status: String,
                          var errorMsg: String,
                          var application: String,
                          var layer: String)

我试图框架一个新的采购订单对象,但检索旧的采购订单和更新采购订单对象的Map。输出控制台:
sap:1 saplogline(2016-04-01,for:po1000、pd1000、产品pd1000在sap数据库中不存在)打印每个sap rdd for:po1000、pd1000、产品pd1000在sap数据库中不存在。开始时间:2016-04-01事务ID:po1000 customfield2:pd1000 errormsg:sap数据库中不存在产品pd1000。endtime 2016-04-01 17/10/03 19:34:06错误jobscheduler:运行作业流作业1507039435000 ms.1 java.lang.classcastexception:scala.none$无法转换为logmonitor.purchaseorder

xqnpmsa8

xqnpmsa81#

我想, mapPO 是一个 Map . 所以,这里有两个问题:
第一, mapPO.get 返回一个 Option ,所以,把它投给 PurchaseOrder 无法工作。
其次,在这种特殊情况下,Map中没有与事务id匹配的条目,因此,它返回 None .
如果你有,你就可以避免这类问题 mapPO 正确声明类型,并避免运行时类型强制转换。

相关问题