[英]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.