1

我是一个新手,Spark我有一个项目,其中有coordinator一个cluster,它从另一个收集数据nodes,进行一些计算并将一个global data array返回给nodes.

我正在尝试实现这一点Spark,并且我用 and 创建了它,driverbroadcast variables我不确定collect()大数据中的。

是否可以仅在 之间执行此操作workers?类似于repartition一对一worker并将计算作为输入发送回workers?

4

1 回答 1

0

简短的回答 - 不,Spark 不公开任何 API 供工作节点(执行程序)与其他工​​作人员通信。我能想到一些解决方法(mapPartitions+ 内部的一些 ZK 协调),但这不是 Spark 的意义所在,也不是您所要求的。

您显然可以将数据重新分区到一个分区 ( repartition(1)),这意味着只有一个执行程序,但您必须确保数据足够小以适合一个节点。然后,您可以将结果发送回驱动程序 ( collect) 并广播回集群。collect()就像“危险”一样repartition(1)- 您必须确保数据适合您的驱动程序。在这种情况下,您可以考虑首先对驱动程序进行中央计算,假设您的驱动程序进程有足够的资源。

于 2018-09-03T18:52:43.813 回答