如何让sparklyr :: spark_apply()产生多个工人?

时间:2017-12-11 05:59:59

标签: r apache-spark sparklyr

我在本地部署中使用{sparklyr}搞乱,即只有一个盒子,我让sparklyr启动所有内容。似乎在本地部署中只生成一个执行器,允许使用该机器的所有核心。当我进入spark_apply()(使用具有多个值的group_by arg)时,我发现只有一个核心被一个Rscript --slave使用。这只是Spark的限制,即每个执行者一个Rscript,还是有某种方法可以让{sparklyr}将工作分散到更多的工作人员身上?我上面的任何假设是否都不正确?

1 个答案:

答案 0 :(得分:0)

这可能会晚一点。但是无论如何:

您可以通过首先设置在一台计算机上启动多名工作人员

SPARK_WORKER_INSTANCES=2

随后运行

$SPARK_HOME/sbin/start-master.sh
$SPARK_HOME/sbin/start-slave.sh spark://hostname:7077 --cores 2

这应该给您两个本地工人,每个工人有2个核心。然后,您可以继续从R

启动您的Sparklyr驱动程序
cfg <- spark_config()
sc <- spark_connect(master = "spark://hostname:7077", config = cfg)

现在在运行spark_apply()之前,请确保可以通过调用sdf_repartition()来拥有比核心更多的分区。对我来说,在一台4核计算机(2个工人,每个核有2个内核)和一个由4个(或更多)分区组成的SDF上,spark_apply()产生4个R会话。

我确实意识到这与您要求的不完全相同,因为您没有使用Sparklyr安装的spark实例。但是实际上,您只需要下载spark release并将$ SPARK_HOME指向下载spark的位置即可。