Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JavaPairDStream转换为RDD_Java_Apache Spark_Machine Learning_Spark Streaming_Apache Spark Mllib - Fatal编程技术网

将JavaPairDStream转换为RDD

将JavaPairDStream转换为RDD,java,apache-spark,machine-learning,spark-streaming,apache-spark-mllib,Java,Apache Spark,Machine Learning,Spark Streaming,Apache Spark Mllib,我使用Spark流和Spark MLlib来评估一个朴素的bayes模型。实际上,我已经到了无法继续的地步,因为我无法将JavaPairDStream的对象转换为RDD来计算精度。预测结果和标签存储在这个JavaPairDStream中,但我想逐一检查它们并进行比较以计算准确度 我将发布我的代码以使我的问题更清楚,代码在计算精度的部分引发了一个异常(运算符/对于参数类型JavaDStream,double是未定义的)(因为这种方法仅适用于javapairdd,而不是),我需要帮助来计算JavaP

我使用Spark流和Spark MLlib来评估一个朴素的bayes模型。实际上,我已经到了无法继续的地步,因为我无法将JavaPairDStream的对象转换为RDD来计算精度。预测结果和标签存储在这个JavaPairDStream中,但我想逐一检查它们并进行比较以计算准确度

我将发布我的代码以使我的问题更清楚,代码在计算精度的部分引发了一个异常(运算符/对于参数类型JavaDStream,double是未定义的)(因为这种方法仅适用于javapairdd,而不是),我需要帮助来计算JavaPairDStream的精度

编辑:我编辑了代码,现在的问题是如何读取精度值,即JavaDStream,然后为每批数据累积该值,以计算所有数据的精度

public static JSONArray testSparkStreaming(){

    SparkConf sparkConf = new SparkConf().setAppName("My app").setMaster("local[2]").set("spark.driver.allowMultipleContexts", "true");
    JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.milliseconds(500));

    String savePath = "path to saved model";
    final NaiveBayesModel savedModel = NaiveBayesModel.load(jssc.sparkContext().sc(), savePath);

    JavaDStream<String> data = jssc.textFileStream("path to CSV file");
    JavaDStream<LabeledPoint> testData = data.map(new Function<String, LabeledPoint>() {
        public LabeledPoint call(String line) throws Exception {
            List<String> featureList = Arrays.asList(line.trim().split(","));
            double[] points = new double[featureList.size()-1];
            double classLabel = Double.parseDouble(featureList.get(featureList.size() - 1));
            for (int i = 0; i < featureList.size()-1; i++){
                points[i] = Double.parseDouble(featureList.get(i));
            }

            return new LabeledPoint(classLabel, Vectors.dense(points));
        }
    });


  JavaPairDStream<Double, Double> predictionAndLabel = testData.mapToPair(new  PairFunction<LabeledPoint, Double, Double>() {
        public Tuple2<Double, Double> call(LabeledPoint p) {
            return new Tuple2<Double, Double>(savedModel.predict(p.features()), p.label());
        }
    });


    JavaDStream<Long> accuracy = predictionAndLabel.filter(new Function<Tuple2<Double, Double>, Boolean>() {
        public Boolean call(Tuple2<Double, Double> pl) throws JSONException {

            return pl._1().equals(pl._2());
        }
    }).count();

    jssc.start();
    jssc.awaitTermination();
    System.out.println("*************");

    JSONArray jsonArray = new JSONArray();
    JSONObject obj = new JSONObject();


    jsonArray.put(obj);
    obj = new JSONObject();
    obj.put("Accuracy", accuracy*100 + "%");
    jsonArray.put(obj);

    return jsonArray;
}
publicstaticjsonarray testSparkStreaming(){
SparkConf SparkConf=new SparkConf().setAppName(“我的应用”).setMaster(“本地[2]”).set(“spark.driver.allowMultipleContexts”,“true”);
JavaStreamingContext jssc=新的JavaStreamingContext(sparkConf,Durations.millizes(500));
String savePath=“保存模型的路径”;
final NaiveBayesModel savedModel=NaiveBayesModel.load(jssc.sparkContext().sc(),savePath);
JavaDStream data=jssc.textFileStream(“CSV文件的路径”);
JavaDStream testData=data.map(新函数(){
公共标签点调用(字符串行)引发异常{
List featureList=Arrays.asList(line.trim().split(“,”);
double[]points=新的double[featureList.size()-1];
double classLabel=double.parseDouble(featureList.get(featureList.size()-1));
对于(int i=0;i
数据流中的“transform”方法允许您对数据流中的每个RDD应用函数@rhernando,我更新了代码,您知道如何读取精度值(即JavaDStream),然后对每批数据累积该值以计算所有数据的精度。如果您想累积结果,仅使用蓄能器:蓄能器accum=sc蓄能器(0);不要计数,而是执行“过滤…foreach(累计添加(1))”。顺便说一句:你应该把jssc.start放在程序的末尾是的,我想累积结果以计算模型的准确性,但是如果我理解正确,你是说在predictionAndLabel上使用累加器,即JavaPairDStream???,我还有两个问题,第一个问题:当我启动jssc时,如何在流式传输文件中存在的所有记录之后停止jssc?第二个问题:流媒体是否可以正确地处理csv文件,或者我必须将其转换为hdfs或任何其他格式???---谢谢如果您只处理一个文件,为什么要使用流媒体?我认为批处理(使用sc.textFile)更合适