使用Apache Spark和Java进行样本外预测

时间:2019-07-16 13:57:26

标签: java apache-spark apache-spark-dataset forecast windowing

我想使用Apache Spark使用transform方法对数据集执行样本外预测。

假设我有一个像这样的数据集:

+-------+------+------+--------+
| label | lag1 | lag2 | Datum  |
+-------+------+------+--------+
|  5    |   4  |  3   | 160101 |
|  6    |   5  |  4   | 160102 |
|  7    |   6  |  5   | 160103 |
|  8    |   7  |  6   | 160104 |
|  9    |   8  |  7   | 160105 |
|  10   |   9  |  8   | 160106 |
+-------+------+------+--------+

我估计了LinearRegression模型,估计的系数例如是0.5和1。现在,我想预测一些将来的值,如下所示:

prediction = 0.5*lag1 + 1*lag2

+------------+------+------+--------+
| prediction | lag1 | lag2 | Datum  |
+------------+------+------+--------+
|    14      |   10 |  9   | 160107 |
|    17      |   14 |  10  | 160108 |
|    23.5    |   17 |  5   | 160109 |
+------------+------+------+--------+

其中14 = 0.5*10 + 9, 17 = 0.5*14 + 10, 23.5 = 0.5*17 + 5

仅在使用withColumn方法时有效:

WindowSpec window = Window.orderBy("Datum");
DataSet<Row> dataset = dataset.withColumn("label", lit(0).plus(lag("label", 1).over(window)).multiply(0.5).plus(lag("label", 2).over(window)));

但是由于可能会改变滞后次数和一些其他功能,因此我想避免这种语法结构。使用纯Spark的最笨拙的方式是使用.transform()中的org.apache.spark.ml.regression.LinearRegression方法(最终使用org.apache.spark.sql.expressions.Window函数)。有什么办法可以实现?由于与scala的版本不兼容,因此我无法使用spark-tsflint(我们正在使用spark-mllib_2.12 2.4.3版本,需要scala 2.12)。

0 个答案:

没有答案