2017-08-15 27 views
4

general contracthashCodeSpark是否在整個集羣中維護Hash函數?

該整數不必從一個應用的執行保持一致,以同一應用程序的另一執行。

因此,對於像Spark這樣每個執行器具有不同JVM的類似的東西,它是否會執行任何操作來確保散列碼在整個羣集中保持一致?

根據我的經驗,我使用具有確定性哈希值的東西,所以它一直沒有問題。

回答

6

根據我的經驗,我使用具有確定性散列的東西,所以它一直沒有問題。

那的確是要走的路,星火不能克服不確定性的哈希碼的對象的使用。

Java Enums的使用是一個特別聲名狼借的例子,它可能會出錯,請參閱:http://dev.bizo.com/2014/02/beware-enums-in-spark.html。引用該帖子:

... Java枚舉類型的hashCode方法基於對象的內存地址。所以是的,我們保證相同的枚舉值在特定的JVM中有一個穩定的hashCode(因爲枚舉將是一個靜態對象) - 當你試圖比較Java枚舉的hashCode和相同的枚舉時,我們沒有這個保證生活在不同JVM中的數值