2015-11-24 18 views
1

我是一個關於火花的新手,並且剛剛開始了一些認真的工作。
我們正在建立一個平臺,我們正在從特定時間戳的電臺接收溫度數據。因此,該數據是越來越張貼到的RabbitMQ爲CSV e.g使用apache火花進行溫度預測

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 

我們正在傾倒的數據到卡桑德拉,我們想用火花建立一個模型出來。 我們從模型中找到的目標是發現在短時間窗口內發生劇烈的溫度升高。例如,數據中1分鐘內溫度上升10度。我正在考慮使用線性迴歸來建立模型。然而火花線性迴歸模型似乎只能接受雙重價值和閱讀文檔後,我明白,發現權重的公式是更加的形式

y = a1x1+a2x2+a3x3 

y = mx+c 

所以火花可以給權重和截距值。但我不確定我可以使用這個模型。 爲了滿足我的好奇心,我確實嘗試從這些數據中構建模型。但所有的預測都非常可怕,我也認爲這些數據。我試圖建立一個溫度與時間戳的矩陣,並且預測很不正確。

我的問題是下面

  1. 是我建立的模型完全錯誤的方式。如果是這樣,我該如何糾正它?
  2. 如果不是線性迴歸模型,是否有任何其他模型機制可以表明這種急劇上升?

我的示例代碼:

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

回答

4

我不知道建立一個線性迴歸模型的選擇是最適合你想要做什麼。首先,模型通常用於進行預測。如果溫度爲您感興趣的變量,而您使用時間作爲自變量進行,這將意味着你會在你沒有使用的數據點在那裏你有測量,測量時間使溫度的預測。或者,如果你試圖說明全球平均氣溫隨時間而上升,擬合線性模型可能是一種方法。這不是你想要做的。

在我看來,你只是想關閉數據,而不是對它進行建模並做出預測。看起來你只是想在一分鐘內減去所有點,並通知你該溫度差是否大於10度。

在這種情況下,魔鬼是在細節。你只對同一個電臺10度的變化感興趣嗎?或者它可以是同一區域內的任何傳感器?無論哪種情況,這都比建模更像是一個數據處理問題。例如,如果你想整天收集數據,然後運行一個腳本來明天分析它,那麼Spark可能是一個很好的候選者。另一方面,如果您希望系統持續監控數據並實時標記您的數據,則Spark可能不是最佳選擇。在這種情況下,你可能想看看Apache Storm。我不是Storm的專家,但我知道他們的大概用例是處理流媒體,分佈式數據。祝你好運!