Java 使用apachespark进行温度预测
对于spark,我是一个新手,刚刚开始了一些严肃的工作Java 使用apachespark进行温度预测,java,apache-spark,linear-regression,Java,Apache Spark,Linear Regression,对于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构建一个模型。 我们的目标是从模
我们正在构建一个平台,在该平台上,我们可以在特定的时间戳接收来自各站的温度数据。因此,数据将作为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度。我正在考虑使用线性回归来建立模型。然而,spark线性回归模型似乎只接受双值,在阅读文档后,我了解到用于寻找权重的方程更多地是以
y = a1x1+a2x2+a3x3
所以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());
JavaRDD parsedData=cassandraRowsRDD.map(新函数(){
公共标签点调用(字符串行){
String[]parts=line.split(“,”);
double value=double.parseDouble(部分[1]);
System.out.println(“Y=“+Double.parseDouble(parts[0])+”::TIMESTAMP=“+value”);
返回新的标签点(Double.parseDouble(parts[0]),Vectors.dense(value));
}
});
parsedData.cache();
StandardScaler scaler=新的StandardScaler();
DataFrame DataFrame=sqlContext.createDataFrame(parsedData,LabeledPoint.class);
System.out.println(dataFrame.count());
dataFrame.printSchema();
LinearRegression lr=新的LinearRegression().setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8);
//符合模型
线性回归模型lrModel=lr.fit(数据帧);
System.out.println(“权重:+lrModel.Weights()+”截距:+lrModel.Intercept());
我不确定构建线性回归模型的选择是否最适合您的尝试。首先,模型通常用于进行预测。如果温度是您感兴趣的变量,并且您使用时间作为自变量,这将意味着您将在您没有测量的时间使用您有测量的数据点预测温度。或者,如果你试图证明全球平均气温是随时间上升的,拟合线性模型可能是一种方法。这不是你想做的
在我看来,你只是想处理数据,而不是建模和预测。似乎你只想在一分钟内减去一个位置上的所有点,然后通知你温差是否大于10度
在这种情况下,细节才是关键。你只对同一个站10度的变化感兴趣吗?或者它可以是同一区域内的任何传感器?无论哪种情况,这都是一个数据处理问题,而不是建模问题。例如,如果您想整天收集数据,然后明天运行分析脚本,那么Spark可能是一个很好的选择。另一方面,如果您希望系统持续监控数据并实时标记您,Spark可能不是最佳选择。在这种情况下,您可能想看看ApacheStorm。我不是Storm方面的专家,但我知道他们的大致用例是处理流式、分布式数据。祝你好运
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());