Rで次のコードを使用して離散ウェーブレット変換を行っています.data.table形式のデータは、ハイブテーブルからチャンクでフェッチされ、マトリックスに変換され、ウェーブレット変換が以下のように適用されます.
library(parallel)
library(wavelets)
# Function to create discrete wavelet transform from data in matrix format
createWt <- function(d_matrix){
wtScore <- NULL
for (i in 1:nrow(d_matrix)){
a <- d_matrix[i,]
wt <- dwt(a, filter= "haar" , boundary = "periodic" )
wtScore <- rbind(wtScore, unlist(c(wt@W,wt@V[[wt@level]])))
}
return(wtScore)
}
# applying the function to a list of matrices parallely using mclapply
wtScore <- parallel::mclapply(m_score, createWt, mc.cores = 28)
離散ウェーブレット変換は、上記のように処理に 28 コアを使用している 32 コアの LINUX マシンで 1000 万 x 52 列のデータセットに対して約 3 時間 30 分かかります。しかし、3,000 万から 3,500 万行 X 52 列のデータセットでこれを行う必要があり、3,000 万行のデータセットを実行するには約 26 時間かかります。 m_score
上記は、data.table から変換されたチャンク マトリックスのリストです。
R でより速く実行するためのアイデア:
- R または他の言語の特殊なライブラリを探しています。
- データはハイブ テーブルから取得されるため、Hive UDF を使用して変換を行うことにもオープンですが、ウェーブレット変換用の UDF が見つかりませんでした。