使用 apache spark 进行温度预测
using apache spark for temperature prediction
我是 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
我们正在将数据转储到 Cassandra 中,我们想使用 spark 从中构建模型。
我们对该模型的目标是找到在短时间范围内发生的急剧温度升高 window。例如,数据中温度在 1 分钟内上升了 10 度。我正在考虑使用线性回归来构建模型。然而,spark 线性回归模型似乎只接受双精度值,在阅读文档后我了解到找到权重的方程式更多的是
y = a1x1+a2x2+a3x3
比
y = mx+c
所以spark可以给出权重和截距值。但是我不确定我是否可以使用这个模型。
只是为了满足我的好奇心,我确实尝试用这些数据构建模型。但是所有的预测都是可怕的,我认为数据也是如此。我试图建立一个温度与时间戳的矩阵,但预测非常不正确。
我的问题如下
- 我构建模型的方式完全错误吗?如果是这样,我该如何纠正?
- 如果不是线性回归模型,是否还有其他模型机制可以指示这种急剧上升?
我的示例代码:
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());
我不确定构建线性回归模型的选择是否最适合您的尝试。首先,模型通常用于进行预测。如果温度是您感兴趣的变量并且您使用时间作为自变量,这意味着您会在没有使用 do 的数据点进行测量的时候预测温度有测量值。或者,如果您试图证明全球平均温度随时间上升,拟合线性模型可能是一种方法。这不是你想要做的。
在我看来,您只想收集运行数据,而不是对其建模和进行预测。似乎您只想在 1 分钟内减去某个位置的所有点,并在温差大于 10 度时通知您。
既然如此,细节决定成败。您是否只对完全相同的站点发生 10 度的变化感兴趣?或者它可以是同一区域内的任何传感器吗?无论哪种情况,这都更像是一个数据处理问题,而不是建模问题。例如,如果你想收集一整天的数据,然后 运行 明天分析它的脚本,那么 Spark 可能是一个不错的选择。另一方面,如果您希望系统持续监控数据并实时标记您,Spark 可能不是最佳选择。在这种情况下,您可能需要查看 Apache Storm。我不是 Storm 方面的专家,但我知道他们的大致用例是处理流式分布式数据。祝你好运!
我是 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
我们正在将数据转储到 Cassandra 中,我们想使用 spark 从中构建模型。 我们对该模型的目标是找到在短时间范围内发生的急剧温度升高 window。例如,数据中温度在 1 分钟内上升了 10 度。我正在考虑使用线性回归来构建模型。然而,spark 线性回归模型似乎只接受双精度值,在阅读文档后我了解到找到权重的方程式更多的是
y = a1x1+a2x2+a3x3
比
y = mx+c
所以spark可以给出权重和截距值。但是我不确定我是否可以使用这个模型。 只是为了满足我的好奇心,我确实尝试用这些数据构建模型。但是所有的预测都是可怕的,我认为数据也是如此。我试图建立一个温度与时间戳的矩阵,但预测非常不正确。
我的问题如下
- 我构建模型的方式完全错误吗?如果是这样,我该如何纠正?
- 如果不是线性回归模型,是否还有其他模型机制可以指示这种急剧上升?
我的示例代码:
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());
我不确定构建线性回归模型的选择是否最适合您的尝试。首先,模型通常用于进行预测。如果温度是您感兴趣的变量并且您使用时间作为自变量,这意味着您会在没有使用 do 的数据点进行测量的时候预测温度有测量值。或者,如果您试图证明全球平均温度随时间上升,拟合线性模型可能是一种方法。这不是你想要做的。
在我看来,您只想收集运行数据,而不是对其建模和进行预测。似乎您只想在 1 分钟内减去某个位置的所有点,并在温差大于 10 度时通知您。
既然如此,细节决定成败。您是否只对完全相同的站点发生 10 度的变化感兴趣?或者它可以是同一区域内的任何传感器吗?无论哪种情况,这都更像是一个数据处理问题,而不是建模问题。例如,如果你想收集一整天的数据,然后 运行 明天分析它的脚本,那么 Spark 可能是一个不错的选择。另一方面,如果您希望系统持续监控数据并实时标记您,Spark 可能不是最佳选择。在这种情况下,您可能需要查看 Apache Storm。我不是 Storm 方面的专家,但我知道他们的大致用例是处理流式分布式数据。祝你好运!