# 使用鍵值對
雖然很多 Spark 操作工作在包含任意類型對象的 RDDs 上的,但是少數幾個特殊操作僅僅在鍵值(key-value)對 RDDs 上可用。最常見的是分布式 "shuffle" 操作,例如根據一個 key 對一組數據進行分組和聚合。
在 Scala 中,這些操作在包含[二元組(Tuple2)](http://www.scala-lang.org/api/2.10.4/index.html#scala.Tuple2)(在語言的內建元組中,通過簡單的寫 (a, b) 創建) 的 RDD 上自動地變成可用的,只要在你的程序中導入 `org.apache.spark.SparkContext._` 來啟用 Spark 的隱式轉換。在 PairRDDFunctions 的類里鍵值對操作是可以使用的,如果你導入隱式轉換它會自動地包裝成元組 RDD。
例如,下面的代碼在鍵值對上使用 `reduceByKey` 操作來統計在一個文件里每一行文本內容出現的次數:
```scala
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() 文檔](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode())中的契約概述。
- Introduction
- 快速上手
- Spark Shell
- 獨立應用程序
- 開始翻滾吧!
- RDD編程基礎
- 基礎介紹
- 外部數據集
- RDD 操作
- 轉換Transformations
- map與flatMap解析
- 動作Actions
- RDD持久化
- RDD容錯機制
- 傳遞函數到 Spark
- 使用鍵值對
- RDD依賴關系與DAG
- 共享變量
- Spark Streaming
- 一個快速的例子
- 基本概念
- 關聯
- 初始化StreamingContext
- 離散流
- 輸入DStreams
- DStream中的轉換
- DStream的輸出操作
- 緩存或持久化
- Checkpointing
- 部署應用程序
- 監控應用程序
- 性能調優
- 減少批數據的執行時間
- 設置正確的批容量
- 內存調優
- 容錯語義
- Spark SQL
- 概述
- SparkSQLvsHiveSQL
- 數據源
- RDDs
- parquet文件
- JSON數據集
- Hive表
- 數據源例子
- join操作
- 聚合操作
- 性能調優
- 其他
- Spark SQL數據類型
- 其它SQL接口
- 編寫語言集成(Language-Integrated)的相關查詢
- GraphX編程指南
- 開始
- 屬性圖
- 圖操作符
- Pregel API
- 圖構造者
- 部署
- 頂點和邊RDDs
- 圖算法
- 例子
- 更多文檔
- 提交應用程序
- 獨立運行Spark
- 在yarn上運行Spark
- Spark配置
- RDD 持久化