emd(empirical mode decomposition)算法广泛用于非平稳时间序列的平稳性处理,其基本原理是将原始序列分解为一系列本征模函数(IMFs)。在数据量比较大的情形下,单机难以处理,可以借助spark分布式计算框架将时间序列分割存储于worker节点上,在分别对每个节点上的子序列进行emd分解,最后将各个节点的结果进行叠加。这一过程需借助RDD的mapPartitions方法实现。
def f(iterator):
data = [x for x in iterator]
npArray = np.array(data).astype('float32')
imfs = emd(npArray, n_imfs=params['n_imfs'])
imfs = np.array(imfs).T.tolist()
return imfs
y_label = y_label.mapPartitions(f)