我正在通過示例學習Spark,但我不知道理解API的好方法。舉例來說,非常經典的字數例如:閱讀和學習Spark API?
val input = sc.textFile("README.md")
val words = input.flatMap(x => x.split(" "))
val result = words.map(x => (x, 1)).reduceByKey((x, y) => x + y)
當我看到reduceByKey
API,我看到:
def reduceByKey(func: (V, V) ⇒ V): RDD[(K, V)]
的API狀態:使用關聯減少功能合併爲每個鍵的值。在將結果發送到Reducer之前,這也將在每個映射器上進行本地合併,類似於MapReduce中的「合併器」。輸出將與現有的分區/並行級別進行散列分區。
在節目指南:當要求的(K, V)
對的數據集,返回(K, V)
對其中對於每個鍵的值被使用給定的降低函數func,它必須是(V,V) => V
類型的聚集的數據集。與groupByKey
一樣,reduce任務的數量可通過可選的第二個參數進行配置。
好的,通過這個例子,我知道(x, y)
是(V, V)
,這應該是地圖的價值部分。我給出了一個函數來計算V
和我得到RDD[(K, V)]
。我的問題是:在這樣的例子中,在reduceByKey(func: (V, V) ⇒ V)
,爲什麼2 V
?第一個和第二個V
在(V, V)
是否相同?
我想我問這個問題,因此使用問題主題,因爲我仍然不知道如何正確讀取API,或者我只是想念一些基本的Spark概念?!