2015-01-31 17 views
7

Ho dati uni-variati della serie storica. Quindi solo TimeStamp e Value. Ora voglio estrapolare (prevedere) questo valore per il giorno/mese/anno successivo. So che esistono metodi come Box-jenkins (ARIMA), ecc.Come si fa una semplice previsione di serie temporali?

Spark ha una regressione lineare e l'ho provato, ma non ho ottenuto risultati soddisfacenti. Qualcuno ha provato la semplice previsione di serie temporali in Spark. Può condividere il loro approccio di implementazione?

PS: controllo la mailing list degli utenti per questo problema. Quasi tutte le domande relative a questo problema non sono state risposte.

+0

Potresti elaborare su * "Spark ha Regressione lineare e l'ho provato, ma non ho ottenuto risultati soddisfacenti" * - il link all'algoritmo di Spark + quello che hai già provato e i risultati con una nota dove loro don ' t incontrare le vostre aspettative. –

+0

Si prega di guardare questo succo. Sentitevi liberi di commentare lì, ho aggiunto dati e algoritmo https://gist.github.com/codeAshu/2ebd84b1b48834fce89b – Rusty

+0

Ho anche guardato questa domanda ma _ "partitionBy" _ mi sta dando errore [http://stackoverflow.com/questions/23402303/apache-spark-moving-average] – Rusty

risposta

0

Sì, sono già stato applicato ARIMA in scintilla per serie temporali uni variate.

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); 
    } 

Questo codice funziona per me. Qui tutti i valori che si desidera prevedere passano come dati di input.

+0

dove sono i valori? – Waqas

Problemi correlati