当我尝试输入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
1条答案
按热度按时间xqnpmsa81#
我想,
mapPO
是一个Map
. 所以,这里有两个问题:第一,
mapPO.get
返回一个Option
,所以,把它投给PurchaseOrder
无法工作。其次,在这种特殊情况下,Map中没有与事务id匹配的条目,因此,它返回
None
.如果你有,你就可以避免这类问题
mapPO
正确声明类型,并避免运行时类型强制转换。