2016-04-28 42 views

回答

2

說你的時間序列是(日,值)對:

(1,10) 
(2,5) 
(3,4) 
... 

而想將它們轉換成(小時值)對其中的價值仍然是所有對同一同一天。

(1,10) 
(2,10) 
(3,10) 
... 
(24,10) 
(25,5) 
... 
(48,5) 
(49,4) 
... 
(72,4) 
... 

這裏是如何在基本斯卡拉做到這一點:

val timeSeries = Seq(1->10, 2->5, 3->4) 

timeSeries.flatMap{ case(day,value) => 
    ((1 to 24)).map(h => ((h+(day-1)*24),value)) 
} 

這裏是如何做到這一點的星火:

val rddTimeSeries = sc.makeRDD(timeSeries) 

// Very similar with what we do in Scala 
val perHourTs = rddTimeSeries.flatMap{ case(day,value) => 
    ((1 to 24)).map(hour => ((hour + (day-1)*24), value)) 
} 
// We can print it given that we know the list is small 
println(perHourTs.collect().toList) 

一個星火複雜的是,數據可能會出來訂單可能會擾亂您的時間序列中的訂單。爲了解決這個問題,最簡單的方法是在您調用RDD上的操作之前對數據進行排序。

// Here is how to sort your time series 
perHourTs.sortBy(_._1).collect() 
相關問題