如何通过SciSpark基于netcdf中的时间拆分数据?

时间:2016-06-28 03:25:27

标签: scala netcdf

val data = RDD[SciTensor]
data.map(y => {
val time = y("time")}

我们如何在SciSpark中获得时间单位和沉重的名字? 下面显示了ncdump结果:

time:units = "hours since 1800-01-01 00:00:0.0".
float precip(time, lat, lon) ;
precip:long_name = "Average Monthly Rate of Precipitation" 

1 个答案:

答案 0 :(得分:0)

感谢您提出问题。 SciSpark正致力于保护单位。

回答有关按时间划分的原始问题。 如果时间维度大于1,那么看看你的变量肯定会按时间分割。否则,你真的不需要。

沉降变量数组的维度为时间,纬度和纬度。

如果您希望按每个时间段拆分,您可以访问每个时间索引中的子数组,如下所示:

val array = y("time")()
val time1 = array(0)
val time2 = array(1)
val time3 = array(2)
etc.

如果你想在每个时间维度中提取子数组并让RDD成为这些子数组的集合,你可以这样做:

data.map(y => {
val timeArray = y("time")()
val timeLength = timeArray.shape(0)
(0 until timeLength).map(i => timeArray(i))
})

这将为您提供RDD类型的RDD [Iterable [AbstractTensor]]

Iterable [AbstractTensor]对应于您按时间分割的原始数组。

你可以更进一步,调用flatMap来获得类似RDD [AbstractTensor]类型的RDD:

data.flatMap(y => {
val timeArray = y("time")()
val timeLength = timeArray.shape(0)
(0 until timeLength).map(i => timeArray(i))
})

确保您使用的是最新版本的SciSpark。 最近引入了一些索引功能。