Microsoft Azure HDInsight上的R服务器 - 处理非常广泛的数据。 - rxExec?

时间:2017-01-18 19:45:56

标签: r azure hdinsight

下面的代码会让您了解我想要做什么。实际上:我正在使用估算的遗传学文件。总共约有1亿个SNP(变量)被估算为数千人。我想对每个变量运行回归。任何单个模型在计算上都是一项微不足道的任务,问题是我正在使用巨型文件并运行这些模型1亿次。

根据微软的说法,他们的HDInsight R服务器针对长数据进行了优化。如果我有一千个变量和一亿次观察,那么任务就会容易得多。

所以我想将我的巨型文件分成几部分。例如,将1百万个SNPS的1个数据集拆分为100,000个SNP的10个数据集。

这是我要运行的代码,最后一行不起作用。需要知道如何将这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")

1 个答案:

答案 0 :(得分:0)

请查看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)。