1
我已將1天的數據彙總爲1天。我想將數據分成24 X 1小時的數據。Apache Spark:將時間序列數據從一天一行轉換爲24 x 1小時行
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
我已將1天的數據彙總爲1天。我想將數據分成24 X 1小時的數據。Apache Spark:將時間序列數據從一天一行轉換爲24 x 1小時行
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
說你的時間序列是(日,值)對:
(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()
你的意思是你有雙(x,y),其中x是時間,y是價值,時間是幾天,你想把它轉換爲幾小時? – marios
是的,這是正確的 –