Apache spark java中使用ConstantInputDStream的spark流

Apache spark java中使用ConstantInputDStream的spark流,apache-spark,streaming,Apache Spark,Streaming,我试图在java spark流媒体程序中使用ConstantInputDStream,但无法做到这一点。我正在做: final SparkConf sparkConf2 = new SparkConf().setAppName("NetworkWordCount"); final JavaStreamingContext ssc2 = new JavaStreamingContext(sparkConf2, new Duration(10000))

我试图在java spark流媒体程序中使用ConstantInputDStream,但无法做到这一点。我正在做:

            final SparkConf sparkConf2 = new SparkConf().setAppName("NetworkWordCount");
            final JavaStreamingContext ssc2 = new JavaStreamingContext(sparkConf2, new Duration(10000));
            final List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
            JavaRDD<Integer> distData = ssc2.sparkContext().parallelize(data);
            final JavaDStream<Integer> numStream = new JavaDStream<Integer>(new ConstantInputDStream<Integer>(ssc2, distData));
final SparkConf sparkConf2=new SparkConf().setAppName(“NetworkWordCount”);
最终JavaStreamingContext ssc2=新的JavaStreamingContext(sparkConf2,新的持续时间(10000));
最终列表数据=Arrays.asList(1,2,3,4,5);
JavaRDD distData=ssc2.sparkContext().parallelize(数据);
最终JavaDStream numStream=新JavaDStream(新ConstantinPutdtream(ssc2,distData));
但最后一条语句给出了编译错误:“错误:ConstantInputDStream类中的构造函数ConstantInputDStream不能应用于给定的类型

问题可能是什么?如何解决?您需要添加

ClassTag<Integer> classTag = ClassTag$.MODULE$.apply(Integer.class);
final JavaDStream<Integer> numStream = new JavaDStream<Integer>(new ConstantInputDStream<Integer>(ssc2, distData,classTag));
ClassTag ClassTag=ClassTag$.MODULE$.apply(Integer.class);
最终JavaDStream numStream=新JavaDStream(新ConstantInputDStream(ssc2,distData,classTag));

我认为API可能已经改变了。我以你的密码为起点,加上毗湿奴的答案,最后得出以下结论:

       try (JavaStreamingContext streamCtxt = new JavaStreamingContext(sparkContext, new Duration(1000))) {
            final List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
            JavaRDD<Integer> distData = streamCtxt.sparkContext().parallelize(data);
            ClassTag<Integer> evidence = ClassTag$.MODULE$.apply(Integer.class);
            ConstantInputDStream<Integer> integerConstantInputDStream =
                    new ConstantInputDStream<>(streamCtxt.ssc(), distData.rdd(), evidence);
            ArrayList<Integer> list = new ArrayList();
            final JavaDStream<Integer> javaDStream = JavaDStream.fromDStream(integerConstantInputDStream, evidence);
            javaDStream.foreachRDD(r -> list.addAll(r.collect()));
            streamCtxt.start();
            streamCtxt.awaitTerminationOrTimeout(2000);
            streamCtxt.stop();
            log.info("here is the list: " + list.stream().map(j->String.valueOf(j)).collect(Collectors.joining(",")));       
        }

试试这个ConstantInputDStream(ssc2,distData),这里是如何根据docs public ConstantInputDStream(StreamingContext _ssc,RDD RDD,scala.reflect.ClassTag证据$1)定义构造函数的
here is the list: 1,2,3,4,5,1,2,3,4,5