Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala中的ClassCastException_Scala_Hadoop_Apache Spark - Fatal编程技术网

scala中的ClassCastException

scala中的ClassCastException,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,当我尝试键入cast时,我得到了ClassCastException。Spark提交代码如下。 输入行:“2017-02-25 14:39:09123 For:PO1028、PD1028、产品PD1028在SAP数据库中不存在。” 我试图构建一个新的采购订单对象,但检索旧的采购订单并更新映射中的采购订单对象。 输出控制台: sap:1 SapLogLine(2016-04-01,For:PO1000、PD1000、产品PD1000在SAP数据库中不存在。) 打印每个sap rdd:PO1000、

当我尝试键入cast时,我得到了ClassCastException。Spark提交代码如下。
输入行:“2017-02-25 14:39:09123 For:PO1028、PD1028、产品PD1028在SAP数据库中不存在。”

我试图构建一个新的采购订单对象,但检索旧的采购订单并更新映射中的采购订单对象。 输出控制台:
sap:1 SapLogLine(2016-04-01,For:PO1000、PD1000、产品PD1000在SAP数据库中不存在。) 打印每个sap rdd:PO1000、PD1000、产品PD1000在sap数据库中不存在。 开始时间:2016-04-01 事务ID:PO1000 customField2:PD1000 errorMsg:SAP DB中不存在产品PD1000。 完时间2016-04-01 17/10/03 19:34:06错误JobScheduler:运行作业流作业1507039435000 ms时出错。1
java.lang.ClassCastException:scala.None$无法强制转换为logMonitor.PurchaseOrder

我假设,
mapPO
是一个
Map
。 所以,这里有两个问题:

首先,
mapPO.get
返回一个
选项
,因此将其强制转换为
PurchaseOrder
无法工作

其次,在这种特殊情况下,映射中没有与事务id匹配的条目,因此它返回
None

如果正确地声明了
mapPO
type,并避免了运行时类型转换,那么就可以避免此类问题

                        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)