spark_apply不分发。节点中只有一个R任务

时间:2017-11-14 10:10:57

标签: r apache-spark apply sparklyr

我将Spark数据框 SDF.data 划分为 6个分区

我的 Sparklyr (0.6.4) 3位执行者上运行。

我正在尝试根据表 df.SplitNames 生成由 SDF.data 中某些列的产品组成的数据框。 spark_apply 功能如下所示:

spark_apply(SDF.data,function(df){
library(data.table)
setDT(df)
df.prod <- df[ , mget( as.character(df.SplitNames$X1[df.SplitNames$Interact]) )] *  
df[ ,mget(as.character( df.SplitNames$X2[df.SplitNames$Interact]) )]
setDF(df.prod)
return(df.prod) 
}) -> SDF.data.interact

然而,这个过程永远不会结束。当我使用 top 检查每个节点中的进程时,我看到在1个节点中运行了一个R任务。就是这样!

我希望spark_apply中的函数能够分发到所有节点。情况似乎并非如此。

我做错了,或 spark_apply 有错误?

1 个答案:

答案 0 :(得分:0)

您可以在执行程序页面标准输出中签出您的spark ui。看来您的数据放在一台计算机上,而不是3台。

SDF.data = sdf_repartition(SDF.data,partitions = 20,partition_by = "your_key")

重新分区后,您可以更快地调用spark_apply。