我是Spark
的新手,我有一个项目,其中coordinator
中有一个cluster
,该项目从另一个nodes
收集数据,执行一些操作计算并将global data array
发送回nodes
。
我正在尝试实现Spark
,并用driver
和broadcast variables
创建了它,但是我不确定大数据中的collect()
。
是否只能在workers
之间执行此操作?像repartition
到worker
的某个东西,然后将计算结果作为输入发送回workers
?
答案 0 :(得分:0)
简短的回答-不,Spark不公开任何API来使工作程序节点(执行程序)与其他工作程序进行通信。我可以想到一些解决方法(mapPartitions
+内含一些ZK协调),但这不是Spark的目的,也不是您的要求。
您可以将数据显然重新分区为一个分区(repartition(1)
),这意味着只有一个执行程序,但是您必须确保数据足够小以适合一个节点。然后,您可以将结果发送回驱动程序(collect
)并广播回群集。 collect()
与repartition(1)
一样“危险”-您必须确保数据适合您的驱动程序。在这种情况下,您可以首先考虑在驱动程序上进行中央计算,前提是您的驱动程序进程具有足够的资源。