2016-04-28 5 views

Antwort

2

Sagen Sie Zeitreihe ist in (Tag, Wert) -Paare:

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

Und Sie wollen, dass sie in (Stunde, Wert) -Paare konvertieren, wenn der Wert der gleiche für alle Paare bleibt in am selben Tag.

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

Hier ist, wie dies in dem Grunde Scala zu tun:

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

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

Hier ist, wie dies auf Funken zu tun:

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) 

Eine Komplikation mit Spark ist, dass die Daten aus kommen können der Reihenfolge, die die Reihenfolge in Ihrer Zeitreihe durcheinander bringen kann. Um dies zu beheben, ist der einfachste Weg, Ihre Daten zu sortieren, bevor Sie eine Aktion auf Ihrer RDD aufrufen.

// Here is how to sort your time series 
perHourTs.sortBy(_._1).collect() 
Verwandte Themen