我正在尝试使用Java API而不是scala从apache Spark流连接到Kafka。
我收到以下错误:
引起:java.lang.NoSuchMethodException: org.apache.spark.util.SystemClock。() at java.lang.Class.getConstructor0(Class.java:3082)at java.lang.Class.newInstance(Class.java:412)
创建JavaStreamingContext对象时会弹出错误。
这是我的代码:
JavaStreamingContext jssc = new JavaStreamingContext("local[2]", "KafkaWordCount",
new Duration(2000), System.getenv("SPARK_HOME"),
JavaStreamingContext.jarOfClass(JavaKafkaWordCount.class));
Map<String, Integer> topicMap = new HashMap<String, Integer>();
topicMap.put("fast-messages", 2);
JavaPairDStream<String, String> messages = KafkaUtils.createStream(jssc, "localhost:9092", "test", topicMap);
JavaDStream<String> lines = messages.map(new Function<Tuple2<String, String>, String>() {
// @Override
public String call(Tuple2<String, String> tuple2) {
return tuple2._2();
}
});
Jar版本:
spark-streaming-kafka_2.10 - 1.6.2 spark-core_2.11 - 1.2.1 spark-streaming_2.10 - 1.6.0
如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
TL; DR 使用spark-core_2.10
这是因为他们使用的Scala版本的依赖性不匹配。
请参阅spark-streaming-kafka_2.10
和spark-core_2.11
以及spark-streaming_2.10
。流式广告罐为Scala 2.10编译,而spark-core为2.11。
它不会强迫您使用Scala而不是Java。 Spark主要使用Scala编写,使用Scala构建的依赖项必须与Scala版本匹配。