我有一个时间序列的单变量数据 . 所以只是TimeStamp和Value . 现在我想推断(预测)第二天/月/年的这个值 . 我知道有Box-jenkins(ARIMA)等方法 .
Spark有线性回归,我尝试过,但是没有得到满意的结果 . 有没有人在Spark中尝试过时间序列的简单预测 . 可以分享实施方法吗?
PS:我在用户邮件列表中检查了这个问题,几乎所有关于这个问题的问题都没有得到答复 .
你可以看看Cloudera的时间序列库:https://github.com/cloudera/spark-timeseries
它确实包括ARIMA . 您还可以查看介绍它的博客文章:https://blog.cloudera.com/blog/2015/12/spark-ts-a-new-library-for-analyzing-time-series-data-with-apache-spark/
是的我已经将ARIMA应用于单一变量时间序列的火花中 .
public static void main(String args[]) { System.setProperty("hadoop.home.dir", "C:/winutils"); SparkSession spark = SparkSession .builder().master("local") .appName("Spark-TS Example") .config("spark.sql.warehouse.dir", "file:///C:/Users/abc/Downloads/Spark/sparkdemo/spark-warehouse/") .getOrCreate(); Dataset<String> lines = spark.read().textFile("C:/Users/abc/Downloads/thunderbird/Time series/trainingvector_arima.csv"); Dataset<Double> doubleDataset = lines.map(line>Double.parseDouble(line.toString()), Encoders.DOUBLE()); List<Double> doubleList = doubleDataset.collectAsList(); //scala.collection.immutable.List<Object> scalaList = new Double[] doubleArray = new Double[doubleList.size()]; doubleArray = doubleList.toArray(doubleArray); double[] values = new double[doubleArray.length]; for(int i = 0; i< doubleArray.length; i++) { values[i] = doubleArray[i]; } Vector tsvector = Vectors.dense(values); System.out.println("Ts vector:" + tsvector.toString()); //ARIMAModel arimamodel = ARIMA.fitModel(1, 0, 1, tsvector, true, "css-bobyqa", null); ARIMAModel arimamodel = ARIMA.autoFit(tsvector, 1, 1, 1); Vector forcst = arimamodel.forecast(tsvector, 10); System.out.println("forecast of next 10 observations: " + forcst); }
这段代码适合我 . 此处,您要预测的任何值都将作为输入数据传递 .
2 回答
你可以看看Cloudera的时间序列库:https://github.com/cloudera/spark-timeseries
它确实包括ARIMA . 您还可以查看介绍它的博客文章:https://blog.cloudera.com/blog/2015/12/spark-ts-a-new-library-for-analyzing-time-series-data-with-apache-spark/
是的我已经将ARIMA应用于单一变量时间序列的火花中 .
这段代码适合我 . 此处,您要预测的任何值都将作为输入数据传递 .