Apache spark 处理来自kafka的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")

我正在尝试处理来自kafka的json消息。当我在流中循环RDD并尝试使用SparkSession读取json字符串时,我看到一个空指针异常。有人能看出这里出了什么问题吗:

    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个以上