2016-04-28 6 views
1

私は1日1列のデータを集計しました。データを24時間×1時間のデータに分割したい。値がですべてのペアのために同じままペアApache Spark:timeseriesデータを1日1行から24時間1時間に変換します

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

そして、あなたは(時間、値)に変換したい:

Input 
1 24 

output 
1 1 
1 2 
1 3 
1 4 
1 5 
1 6 
1 7 
1 8 
1 9 
1 10 
... 
1 24 
+0

あなたはxが時間でyが値で時間が単位であり、それを時間に変換したいペア(x、y)があることを意味しますか? – marios

+0

はいいいえ –

答えて

2

あなたはペアの時系列は(日、値)であると言います即日。ここで

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

基本Scalaでこれを行う方法です:

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でアクションを呼び出す前にデータをソートするのが最も簡単な方法です。

関連する問題