scala中的ClassCastException
当我尝试键入cast时,我得到了ClassCastException。Spark提交代码如下。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、
输入行:“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)