使用 apache spark 进行温度预测

Rav*_*rma 2 java linear-regression apache-spark

我是 Spark 的新手,刚刚开始认真研究它。
我们正在构建一个平台,在该平台上我们从特定时间戳的站点接收温度数据。因此,数据将作为 csv 发布到 RabbitMQ,例如

WD1,12.3,15-10-12T12:23:45
WD2,12.4,15-10-12T12:24:45
WD1,12.3,15-10-12T12:25:45
WD1,22.3,15-10-12T12:26:45
Run Code Online (Sandbox Code Playgroud)

我们将数据转储到 Cassandra 中,我们想使用 spark 从中构建模型。我们从模型中的目标是找到在短时间内发生的急剧升温。例如,在数据中,1 分钟内温度升高了 10 度。我正在考虑使用线性回归来构建模型。然而,火花线性回归模型似乎只接受双值,在阅读文档后我明白了寻找权重的等式更多的是

y = a1x1+a2x2+a3x3
Run Code Online (Sandbox Code Playgroud)

y = mx+c
Run Code Online (Sandbox Code Playgroud)

所以 spark 可以给出权重和截距值。但我不确定我可以使用这个模型。只是为了满足我的好奇心,我确实尝试用这些数据构建模型。但是所有的预测都是可怕的,我认为数据也是如此。我试图建立一个温度与时间戳的矩阵,但预测非常不正确。

我的问题如下

  1. 我构建模型的方式是完全错误的。如果是这样,我该如何纠正?
  2. 如果不是线性回归模型,是否还有其他模型机制可以表明这种急剧上升?

我的示例代码:

JavaRDD<LabeledPoint> parsedData = cassandraRowsRDD.map(new Function<String, LabeledPoint>() {
            public LabeledPoint call(String line) {
                String[] parts = line.split(",");
                double value = Double.parseDouble(parts[1]);
                System.out.println("Y = " + Double.parseDouble(parts[0]) + " :: TIMESTAMP = " + value);
                return new LabeledPoint(Double.parseDouble(parts[0]), Vectors.dense(value));
            }
        });
        parsedData.cache();

        StandardScaler scaler = new StandardScaler();
        DataFrame dataFrame = sqlContext.createDataFrame(parsedData, LabeledPoint.class);
        System.out.println(dataFrame.count());

        dataFrame.printSchema();

        LinearRegression lr = new LinearRegression().setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8);

        // Fit the model
        LinearRegressionModel lrModel = lr.fit(dataFrame);
        System.out.println("Weights: " + lrModel.weights() + " Intercept: " + lrModel.intercept());
Run Code Online (Sandbox Code Playgroud)

Zak*_*akJ 5

我不确定选择构建线性回归模型是否最适合您的工作。首先,模型通常用于进行预测。如果温度为您感兴趣的变量,而您使用时间作为自变量进行,这将意味着你会在时间使得温度的预测,你没有使用,你的数据点的测量有测量。或者,如果您试图证明全球平均温度随时间上升,拟合线性模型可能是一种方法。这不是你想要做的。

在我看来,您只想处理数据,而不是对其进行建模和预测。似乎您只想在 1 分钟内减去一个位置的所有点,并在温差大于 10 度时通知您。

在这种情况下,魔鬼在细节中。您是否只对同一个站点的 10 度变化感兴趣?或者它可以是同一区域内的任何传感器?在任何一种情况下,这更像是一个数据处理问题,而不是建模问题。例如,如果你想整天收集数据,然后运行一个脚本来分析它明天,那么 Spark 可能是一个不错的选择。另一方面,如果您希望系统持续监控数据并实时标记您,Spark 可能不是最佳选择。在这种情况下,您可能需要查看 Apache Storm。我不是 Storm 的专家,但我知道他们的大概用例是处理流、分布式数据。祝你好运!