尝试键入强制转换时,出现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)
我正在尝试构建新的采购订单对象,但要检索旧的采购订单并更新Map中的采购订单对象。
输出控制台:
汁液:1
SapLogLine(2016-04-01,用于:PO1000,PD1000,产品PD1000在SAP DB中不存在。)
打印以下SAP的每个SAP RDD:PO1000,PD1000,产品PD1000在SAP DB中不存在。
开始时间:2016-04-01
交易编号:PO1000
customField2:PD1000
errorMsg:产品PD1000在SAP DB中不存在。
结束时间2016-04-01
03/10/17 19:34:06错误JobScheduler:运行作业流作业1507039435000 ms.1时出错
java.lang.ClassCastException:scala.None $无法转换为logMonitor.PurchaseOrder
最佳答案
我假设mapPO
是Map
。
因此,这里有两个问题:
首先,mapPO.get
返回一个Option
,因此,将其强制转换为PurchaseOrder
无效。
其次,在这种特殊情况下, map 中没有与您的交易ID相匹配的条目,因此它返回None
。
如果正确声明了mapPO
类型,并且避免了运行时类型强制转换,则可以避免整个此类问题。
关于scala - Scala中的ClassCastException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46547186/