Danke die Frage zu stellen. SciSpark arbeitet an der Erhaltung von Einheiten.
Beantworten Sie Ihre ursprüngliche Frage über das Teilen nach Zeit. Wenn Sie Ihre Variable betrachten, können Sie definitiv nach der Zeit aufteilen, wenn die Zeitdimension größer als 1 ist. Andernfalls brauchen Sie das nicht wirklich.
Das variable Array "precipen" hat die Dimensionen time, lat und lon.
Wenn Sie von jeder Zeitepoche teilen möchten, können Sie das Sub-Array in jedem Zeitindex wie so Zugang:
val array = y("time")()
val time1 = array(0)
val time2 = array(1)
val time3 = array(2)
etc.
Wenn Sie die Unterfelder in jeder Zeitdimension extrahieren möchten und haben die RDD sein eine Sammlung dieser Subarrays Sie, dass wie so tun können:
data.map(y => {
val timeArray = y("time")()
val timeLength = timeArray.shape(0)
(0 until timeLength).map(i => timeArray(i))
})
Dies gibt Ihnen eine RDD vom Typ RDD [Iterable [AbstractTensor]]
Die Iterable [Abstract Tensor] entspricht dem ursprünglichen Array, das Sie nach Zeit aufgeteilt haben.
können Sie noch weiter gehen und eine flatMap rufen eine RDD vom Typ RDD [AbstractTensor] wie so zu erhalten:
data.flatMap(y => {
val timeArray = y("time")()
val timeLength = timeArray.shape(0)
(0 until timeLength).map(i => timeArray(i))
})
sicher, dass Sie die neueste Version von SciSpark sind Stellen verwenden. Einige der Indexierungsfunktionen wurden kürzlich eingeführt.