使用鍵值對

即使很多 Spark 的操作視在任意類型物件的 RDDs 上,仍有少數幾個特殊操作僅在鍵值(key-value) 對 RDDs 上使用。最常見的是分布式 "shuffle" 操作,例如根據一個 key 對一組資料進行分組跟整合。

在 Scala 中,這些操作包含二元组(Tuple2)(在語言的內建元祖中,簡單的寫 (a, b) 即可建立) 的 RDD 上自動變成可用元素,只要在你的程式中匯入 org.apache.spark.SparkContext._ 來啟動 Spark 的隱式轉換(implicit conversions)。在 PairRDDFunctions 的類別鍵值對操作中可以使用,如果你匯入隱式轉換,它會自動包成元組 (tuple) RDD。

舉例,下面的程式在鍵值對上使用 reduceByKey 來統計一個文件裡面每一行內容出現的次數:

val lines = sc.textFile("data.txt")
val pairs = lines.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)

也可以使用 counts.sortByKey(),例如,將鍵值對按照字母做排序,最後用 counts.collect() 輸出成結果陣列送回驅動程式。

注意:使用一個自行定義物件作為 key 在使用鍵值對操作的時候,需要確保定義的equals() 方法和 hashCode() 方法是匹配的。細節請看 Object.hashCode() 文件) 內的描述。

results matching ""

    No results matching ""