【发布时间】:2015-11-24 12:40:53
【问题描述】:
我是 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 从中构建模型。 我们从模型中的目标是找到在短时间内发生的急剧升温。例如,在数据中,温度在 1 分钟内上升了 10 度。我正在考虑使用线性回归来构建模型。然而,火花线性回归模型似乎只接受双值,在阅读了文档后,我了解到寻找权重的方程更多地是以
的形式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());
【问题讨论】:
标签: java apache-spark linear-regression