我将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 有错误?
答案 0 :(得分:0)
您可以在执行程序页面标准输出中签出您的spark ui。看来您的数据放在一台计算机上,而不是3台。
SDF.data = sdf_repartition(SDF.data,partitions = 20,partition_by = "your_key")
重新分区后,您可以更快地调用spark_apply。