错误写法:
resultDStream1.foreachRDD{ rdd => {
offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
KafkaOffsetSave(offsetRanges)
rdd.foreachPartition{ partitionOfRecords => {
val connection = getConnection()
partitionOfRecords.foreach{ record => {
......
出现报错:
- Error running job streaming job 1578567900000 ms.2
java.lang.ClassCastException: org.apache.spark.rdd.ShuffledRDD cannot be cast to org.apache.spark.streaming.kafka010.HasOffsetRanges
原因:
ShuffledRDD不能转换成HasOffsetRanges,HasOffsetRanges只能通过KafkaRDD转换成。
只有通过InputDStream所得到的第一手数据才包含KafkaRDD
val inDStream: InputDStream[ConsumerRecord[String, String]] = KafkaOffsetRead(ssc, kafkaParams, topics ,topic)
var offsetRanges = Array[OffsetRange]()
inDStream.foreachRDD { rdd =>
//获取偏移对象数组
offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
KafkaOffsetSave(offsetRanges)
}
IDEA显示结果
虚拟机mysql查看
成功!