2017-06-19 69 views
0

我需要一個關於RDD的函數,比方說'isAllMatched',它將謂詞作爲參數來匹配。但是,我不想掃描所有元素,如果謂詞失敗的任何元素,它應該返回false。我也希望這個功能在所有工作節點上並行執行。這裏是僞代碼:需要火花中的特定函數來檢查所有元素是否與給定的謂詞匹配?

def isAllMatched[T : ClassTag](rdd: RDD[T])(pred: T => Boolean) = { 
     foreach(ele <- rdd.elements) { 
      if(!pred(ele)) return false; 
     } 
     return true; 
} 

這在Spark中可能嗎?有沒有內置的功能來做到這一點?

回答

0

我不知道現有RDD操作來實現這一結果,但你可以實現你這樣的功能:

def isAllMatched[T](rdd: RDD[T])(pred: T => Boolean): Boolean = 
    rdd.filter(e => !pred(e)).isEmpty 
+0

是的,但這會掃描所有元素。我想在謂詞失敗時立即中斷執行。 – aks

-1

彼得的回答是正確的。它完全符合你的要求。延遲評估確保掃描停止在謂詞測試失敗的第一個元素上,並且布爾值false返回給驅動程序。任何在同一操作的其他節點上運行的任務都將被放棄。

相關問題