解决:IDEA中kafka.serializer.StringDecoder导入报红的问题
kafka版本为0.9.0.0;spark-streaming-kafka-0-8_2.11
在sparkstreaming 整合 kafka时,采用direct方法。在StringDecoder手动导入kafka.serializer.StringDecoder时,一直报红。
解决方法一:手动在代码头部添加
import _root_.kafka.serializer.StringDecoder
解决方法二:暂时删除之前创建的java->com.imooc.kafka文件夹,因为会有冲突,删除后未报错
代码如下:
package com.imooc.spark
import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
import _root_.kafka.serializer.StringDecoder
/**
* Spark Streaming对接Kafka的方式二
*/
object KafkaDirectWordCount {
def main(args: Array[String]): Unit = {
if(args.length != 2){
System.err.println("Usage:KafkaDirectWordCount <brokers> <topics>")
System.exit(1)
}
val Array(brokers,topics) = args
val sparkConf = new SparkConf().setAppName("KafkaReceiverWordCount").setMaster("local[2]")
val ssc = new StreamingContext(sparkConf,Seconds(5))
val topicsSet = topics.split(",").toSet
val kafkaParams = Map[String,String]("metadata.broker.list"-> brokers)
//TODO...Spark Streaming如何对接Kafka
val messages = KafkaUtils.createDirectStream[String,String,StringDecoder,StringDecoder](ssc,kafkaParams,topicsSet)
messages.map(_._2).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).print()
ssc.start()
ssc.awaitTermination()
}
}
运行后产生错误
Exception in thread "main" java.lang.ClassCastException: kafka.cluster.BrokerEndPoint cannot be cast to kafka.cluster.Broker
at org.apache.spark.streaming.kafka.KafkaClusterKaTeX parse error: Can't use function '$' in math mode at position 8: anonfun$̲2anonfun 3 3 3 a n o n f u n anonfun anonfunapply 6 6 6 a n o n f u n anonfun anonfunapply 7. a p p l y ( K a f k a C l u s t e r . s c a l a : 97 ) a t s c a l a . O p t i o n . m a p ( O p t i o n . s c a l a : 146 ) a t o r g . a p a c h e . s p a r k . s t r e a m i n g . k a f k a . K a f k a C l u s t e r 7.apply(KafkaCluster.scala:97) at scala.Option.map(Option.scala:146) at org.apache.spark.streaming.kafka.KafkaCluster 7.apply(KafkaCluster.scala:97)atscala.Option.map(Option.scala:146)atorg.apache.spark.streaming.kafka.KafkaCluster$anonfun 2 2 2$anonfun 3 3 3 a n o n f u n anonfun anonfunapply 6. a p p l y ( K a f k a C l u s t e r . s c a l a : 97 ) a t o r g . a p a c h e . s p a r k . s t r e a m i n g . k a f k a . K a f k a C l u s t e r 6.apply(KafkaCluster.scala:97) at org.apache.spark.streaming.kafka.KafkaCluster 6.apply(KafkaCluster.scala:97)atorg.apache.spark.streaming.kafka.KafkaCluster$anonfun 2 2 2$anonfun 3 3 3 a n o n f u n anonfun a