我是新手,以及相关的概念,所以请善待我,帮助我澄清疑虑,我会举个例子来帮助你理解我的问题。
我有一个javaPairRDD" rdd"其中包含像
这样的元组Tuple2 <Integer,String[]>
让我们假设String [] .length = 3,意味着它除了键之外还包含3个元素,我想要做的是使用3个RDD和3个操作来更新向量的每个元素,&#34; R1&#34 ;和&#34; operation1&#34;用于修改第一个元素,&#34; R2&#34;和&#34;操作2&#34;用于修改第二个元素和&#34; R3&#34;和&#34;操作3&#34;用于修改第三个元素,
R1,R2和R3是提供元素新值的RDD
我知道spark会将数据(在这个例子中是&#34; rdd&#34;)分成许多分区,但我要问的是:是否可以在同一个分区中同时执行不同的操作时间?
根据我的例子,因为我有3个操作,这意味着我可以同时使用3个元组而不是只使用一个来操作它:
我想要的治疗方法是:(t指的是时间)
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
at 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
at 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个元组)来对待它们,依此类推......
请善待它只是一个想到我的想法,我想知道是否可以这样做,谢谢你的帮助
答案 0 :(得分:1)
Spark并不保证执行的顺序。
您决定如何转换RDD的各个元素,而Spark负责以最有效的方式将转换应用于所有元素。
根据您的环境中可用的执行程序(即线程或服务器或两者)的数量,Spark实际上会同时处理尽可能多的元组。
答案 1 :(得分:1)
首先,欢迎来到Spark社区。 p>
要添加@TomaszBłachut答案,Spark的执行上下文不会将节点(例如一台计算PC)识别为单独的处理单元,而是识别其核心。因此,可以将一个作业分配给22核Xeon上的两个核心而不是整个节点。
Spark EC确实将节点视为计算单元的效率和性能;因为这对于在不同性能的节点之间划分更大的工作或者如果它们很慢或经常失败而将它们列入黑名单是相关的。