2016-07-27 61 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

相關問題