簡體   English   中英

Microsoft Azure HDInsight上的R服務器 - 處理非常廣泛的數據。 - rxExec?

[英]R-server on Microsoft Azure HDInsight - dealing with very wide data. - rxExec?

下面的代碼將讓您了解我想要做什么。 實際上:我正在使用估算的遺傳學文件。 總共約有1億個SNP(變量)被估算為數千人。 我想對每個變量運行回歸。 任何單個模型在計算上都是一項微不足道的任務,問題是我正在使用巨型文件並運行這些模型1億次。

根據微軟的說法,他們的HDInsight R服務器針對長數據進行了優化。 如果我有一千個變量和一億次觀察,那么任務就會容易得多。

所以我想將我的巨型文件分成幾部分。 例如,將1百萬個SNPS的1個數據集分成10個100,000個SNP的數據集。

這是我想要運行的代碼,最后一行不起作用。 需要知道如何將這10個較小的數據集分別發送到不同的節點,然后運行一個通用函數。 通常我想重現mclapply()函數,但不是在多個核心上運行它,而是在多個工作節點上運行它。

通常,服務器的工作方式是自動將行分成幾個部分,並以這種方式分配任務,這樣就浪費了幾千個觀察資源

col <- 10000
row <- 500

df <- data.frame(matrix(rnorm(row*col),nrow=row))
caco <- sample(0:1, row, replace=T)



# The way I would do it locally for a normal dataset


fun <- function(x){
  var <- df[[x]]
  model <- summary(glm(caco ~ var, family="binomial"))
  p <- c(x,coef(model)["var","Pr(>|z|)"])
  return(p)
}

stuff <- names(df)
results <- lapply(stuff,fun) 
# or
results <- mclapply(stuff,fun)



### what I want to do

# Split into several data frames
# possibly to other data manipulation, whatever is necessary

df1 <- df[,1:2000]
df2 <- df[,2001:4000]
df3 <- df[,4001:6000]
df4 <- df[,6001:8000]
df5 <- df[,8001:10000]

# I want to send each worker node one of these datasets, so each runs 2000 models

# this code does not work - 
# but I think this is the general direction I want to go, using the 
# rxExec function

out <- rxExec(fun, rxElemArg(stuff), execObjects=c("df1","df2","df3","df4")

請查看RxExec文檔是否可以在此處提供幫助。 https://msdn.microsoft.com/en-us/microsoft-r/scaler-distributed-computing#parallel-computing-with-rxexec

特別是這一部分,它展示了類似的案例。 https://msdn.microsoft.com/en-us/microsoft-r/scaler-distributed-computing#plotting-the-mandelbrot-set

為了獲得更好的運行時性能,用戶可能希望直接在rxExec中操作輸入文件,而不是通過dataFrame對象共享它。

如果您有其他問題,請告訴我(微軟網絡公司的xiaoyzhu)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM