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)