当我尝试输入强制转换时,我收到了ClassCastException。 Spark提交代码如下 输入行:" 2017-02-25 14:39:09,123对于:PO1028,PD1028,产品PD1028在SAP DB中不存在。"
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)
我正在尝试构建新的采购订单对象,但检索旧的采购订单并更新地图中的采购订单对象。
输出控制台:
闷棍:1
SapLogLine(2016-04-01,For:PO1000,PD1000,产品PD1000在SAP DB中不存在。)
打印每个sap rdd对于:PO1000,PD1000,产品PD1000不存在于SAP DB中。
startTime:2016-04-01
TransactionId:PO1000
customField2:PD1000
errorMsg:产品PD1000不存在于SAP DB中。
endTime 2016-04-01
17/10/03 19:34:06错误JobScheduler:运行作业流作业时出错1507039435000 ms.1
java.lang.ClassCastException:scala.None $无法强制转换为logMonitor.PurchaseOrder
答案 0 :(得分:2)
我假设,mapPO
是Map
。
所以,你有两个问题:
首先,mapPO.get
会返回Option
,因此将其投放到PurchaseOrder
无效。
其次,在这种特殊情况下,地图中没有与您的交易ID匹配的条目,因此,它会返回None
。
如果正确声明了mapPO
类型,并避免运行时类型转换,那么你可以避免这类问题。