我有一个星火数据帧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有错误吗?
发布于 2018-10-26 04:31:33
您可以签出您的火花ui在执行者页面标准。你的数据似乎放在一台机器上,而不是3台机器上。
SDF.data = sdf_repartition(SDF.data,partitions = 20,partition_by = "your_key")
重新分区之后,您可以更快地调用spark_apply。
https://stackoverflow.com/questions/47282959
复制相似问题