2016-07-27 26 views
-1

我是新来的火花及其相关概念,所以请善待我并帮助我澄清我的疑惑,我会给你一个例子来帮助你理解我的问题。是否可以在一个分区的火花内创建并行操作?

我有一个javaPairRDD“RDD”,其中包含像

Tuple2 <Integer,String[]> 

元组,例如,假设字符串[]长度= 3,意味着它包含除了键3层的元件,我想要做什么是更新向量的每个元素使用3个RDD和3个操作,“R1”和“operation1”用于修改第一个元素,“R2”和“operation2”用于修改第二个元素,“R3”和“operation3”用于修改第三个元素,

R1,R2和R3是提供元素的新值的RDD

我知道火花将数据(在本例中是“rdd”)划分为多个分区,但我所问的是:是否可以在同一分区中同时执行不同的操作?

根据我的例子,因为我有3个操作,这意味着我可以在同一时间采取3元组,而不是只考虑一个操作它:

,我想它是处理:(吨指的时间)

at t=0: 
*tuple1=use operation1 to modify the element 1 

*tuple2=use operation2 to modify the element2 

*tuple3=use operation3 to modify the element 3 

在t = 1:

*tuple1=use operation2 to modify the element 2 

*tuple2=use operation3 to modify the element3 

*tuple3=use operation1 to modify the element 1 

在t = 2:

*tuple1=use operation.3 to modify the element 3 

*tuple2=use operation1 to modify the element1 

*tuple3=use operation2 to modify the element 2 

完成更新3个元组后,我拿别人(3元组)从同一partion对待他们,等等..

请善待它只是掠过我脑海一个念头,我想知道是否可以做到这一点,谢谢你的帮助

+0

看看'mapPartitions' - 它可能会帮你一点 – Alec

+0

我低估了,因为我认为你需要花更多的时间来阅读火花文档和概念。在这个状态下,这个问题几乎没有意义。 – C4stor

回答

1

Spark并不保证执行顺序。

您可以决定RDD的各个元素应该如何转换,并且Spark负责将转换应用于所有元素,而这种转换的方式是最有效的。

根据您的环境中有多少执行器(即线程或服务器或两者)可用,Spark实际上会同时处理尽可能多的元组。

+0

非常感谢你@TomaszBłachut,我非常明白,所有这一切都取决于核心(执行者)的数量,但是我在想,也许同一个核心可以同时对待多个元组,但是在你的答案之后,我想它没有任何意义,bcz spark已经做到了这一点 – ham

1

首先,欢迎来到Spark社区。

要添加到@TomaszBłachut答案,Spark的执行上下文不会将节点(例如一台计算机)标识为单独的处理单元,而是将其核心标识出来。因此,可以将一个作业分配给22核心Xeon上的两个核心,而不是整个节点。

尽管Spark EC确实将节点当作计算单元来考虑它们的效率和性能;因为这与在不同表现的节点间划分更大的工作或者如果经常缓慢或失败将其列入黑名单相关。

+0

非常感谢@sebszyller,我非常清楚,所有这一切都取决于核心数量(执行者),但我在想,也许同一个核心可以在同一个核心处理多个元组时间,但在你的答案后,我认为这没有任何意义,bcz spark已经做到了。 – ham

相关问题