0

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 が見つかりませんでした。
4

0 に答える 0