sparkR中的for循环相当于什么?

时间:2016-08-19 04:05:59

标签: sparkr

我需要对数据框的所有列组合执行数学运算。在R中,我会使用一个简单的嵌套for循环来做到这一点。但是在sparkR中,我认为没有循环可用。你怎么建议我处理这个?

3 个答案:

答案 0 :(得分:1)

您可以使用 foreach 功能。

  

foreach(rdd,func)

     

foreachPartition(rdd,func)

示例:

##To print each element in an RDD
  foreach(rdd, function(x) { print(x) })

您可以参考Documentation for package ‘SparkR’

答案 1 :(得分:1)

@avinash继续我们在评论中的谈话。 IMO的重要性在于学习/研究Spark最常用的SparkR,以及它在SparkR之外做的最好的事情。 Spark的功能在于处理大型数据集,因此在您的问题中,列总和的计算适合Spark的分布式处理能力。但是,Spark不提供处理单个值的功能,只提供DataFrame和列。因此,列总计的数学运算最好在Spark之外完成。以下是我如何解决您的问题:

# prep R data.frame
col1 <- c(1,2,3)
col2 <- c(4,5,6)
col3 <- c(7,8,9)
rdf <- data.frame(col1, col2, col3)

# create spark DataFrame
sdf <- createDataFrame(sqlContext, rdf)

# use spark to calc totals
sdfSums <- agg(sdf, col1="sum", col2="sum", col3="sum")
names(sdfSums) <- c("col1Sum", "col2Sum", "col3Sum")

# collect the resulting 1 row DataFrame back into an R data.frame
rdfSums <- collect(sdfSums)

# do the math on the values in R
for (i in 1:ncol(rdfSums)){
  for (j in 1:ncol(rdfSums)){
    if (i != j) {
      print(  paste("column",i,"minus column", j,"equals", rdfSums[,i]-rdfSums[,j]))
    }
  }
}

我希望有帮助

答案 2 :(得分:0)

如果您在案例中使用SqlContext会更好,尽管您还没有提供任何可重现的代码。