Apache spark 处理来自kafka的json时触发会话空指针
我正在尝试处理来自kafka的json消息。当我在流中循环RDD并尝试使用SparkSession读取json字符串时,我看到一个空指针异常。有人能看出这里出了什么问题吗:Apache spark 处理来自kafka的json时触发会话空指针,apache-spark,Apache Spark,我正在尝试处理来自kafka的json消息。当我在流中循环RDD并尝试使用SparkSession读取json字符串时,我看到一个空指针异常。有人能看出这里出了什么问题吗: SparkSession spark = SparkSession .builder().master("local[*]") .appName("ABC") .config("spark.some.config.option", "some-value")
SparkSession spark = SparkSession
.builder().master("local[*]")
.appName("ABC")
.config("spark.some.config.option", "some-value")
.getOrCreate();
JavaStreamingContext jssc = new JavaStreamingContext(new StreamingContext(spark.sparkContext(),Durations.seconds(2)));
// Kafka params code here.....not shown
JavaInputDStream<ConsumerRecord<String, String>> istream1 = KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<String, String>Subscribe(Arrays.asList(topic1), kafkaParams)
);
istream1.foreachRDD(rdd ->{
rdd.foreach(consumerRecord ->{
Dataset<Row> rawData = spark.read().json(consumerRecord.value());
rawData.createOrReplaceTempView("sample");
Dataset<Row> resultsDF = spark.sql("SELECT alert_id, date from sample");
resultsDF.show();
});
});
SparkSession spark=SparkSession
.builder().master(“本地[*]”)
.appName(“ABC”)
.config(“spark.some.config.option”、“some value”)
.getOrCreate();
JavaStreamingContext jssc=新的JavaStreamingContext(新的StreamingContext(spark.sparkContext(),Durations.seconds(2));
//卡夫卡参数代码在此…未显示
JavaInputDStream istream1=KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.Subscribe(Arrays.asList(topic1),kafkaParams)
);
istream1.foreachRDD(rdd->{
rdd.foreach(消费者记录->{
数据集rawData=spark.read().json(consumerRecord.value());
创建或替换临时视图(“示例”);
数据集resultsDF=spark.sql(“选择警报id,样本日期”);
resultsDF.show();
});
});
我发现我无法在foreachRDD部分中使用spark会话或作为该会话一部分的上下文(获取空指针)
原因:java.lang.NullPointerException
位于org.apache.spark.sql.SparkSession.sessionState$lzycompute(SparkSession.scala:112)
位于org.apache.spark.sql.SparkSession.sessionState(SparkSession.scala:110)
位于org.apache.spark.sql.DataFrameReader(DataFrameReader.scala:535)
位于org.apache.spark.sql.SparkSession.read(SparkSession.scala:595)
在com.ibm.sifs.evidence.SpoofingEvidence.lambda$1(SpoofingEvidence.java:99)
位于org.apache.spark.api.java.JavaRDDLike$$anonfun$foreach$1.apply(JavaRDDLike.scala:350)
位于org.apache.spark.api.java.JavaRDDLike$$anonfun$foreach$1.apply(JavaRDDLike.scala:350)
位于scala.collection.Iterator$class.foreach(Iterator.scala:893)
在org.apache.spark.streaming.kafka010.KafkaRDD$kafkarditerator.foreach(KafkaRDD.scala:193)
位于org.apache.spark.rdd.rdd$$anonfun$foreach$1$$anonfun$apply$27.apply(rdd.scala:875)
位于org.apache.spark.rdd.rdd$$anonfun$foreach$1$$anonfun$apply$27.apply(rdd.scala:875)
位于org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1897)
位于org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1897)
位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
位于org.apache.spark.scheduler.Task.run(Task.scala:85)
位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:274)
... 3个以上