Spark Basic RDD 操作示例
Transformation
基本 RDD 的 transformation
假設有一個 RDD ,其中的元素有 {1, 2, 3, 3}:
函式 | 目的 | 示例 | 結果 |
---|---|---|---|
map() |
將函式應用到 RDD 中的每一個元素並以 RDD 的形式返回結果 | rdd.map(x => x+1) |
{2, 3, 4, 4} |
flatMap() |
將函式應用到 RDD 中的每一個元素,並以 RDD 的形式返回 iterator 的內容。通常用於提取詞語。 | rdd.flatMap(x => x.to(3)) |
{1, 2, 3, 2, 3, 3, 3} |
filter() |
返回一個 RDD, 該 RDD 中僅包含了能夠通過 filter() 函式的元素 |
rdd.filter(x => x != 1) |
{2, 3, 3} |
distinct() |
去除重複項 | rdd.distinct() |
{1, 2, 3} |
兩個 RDD 的 transformation
假設有兩個 RDD, 分別包含了 {1, 2, 3} 和 {3, 4, 5}:
函式 | 目的 | 示例 | 結果 |
---|---|---|---|
union() |
並集,生成一個包含了兩個 RDD 元素的 RDD | rdd.union(other) |
{1, 2, 3, 3, 4, 5} |
intersection() |
交集,生成 RDD 包含了在兩個 RDD 中同時出現的元素 | rdd.intersection(other) |
{3} |
subtract() |
移除一個 RDD 中的內容 | rdd.subtract(other) |
{1, 2} |
cartesian() |
以另一個 RDD 的 笛卡爾積 | rdd.cartesian(other) |
{(1, 3), (1, 4), (1, 5), (2, 3), (2, 4)}, ..., (3, 5) |
Action
假設有一個 RDD ,其中的元素有 {1, 2, 3, 3}:
函式 | 目的 | 示例 | 結果 |
---|---|---|---|
collect() |
返回 RDD 中的所有元素 | rdd.collect() |
{1, 2, 3, 3} |
count() |
RDD 中的元素數目 | rdd.count() |
4 |
countByValue() |
RDD 中每個元素出現的次數 | rdd.countByValue() |
{(1, 1), (2, 1), (3, 2)} |
take(num) |
返回 RDD 中的 num 個元素 | rdd.take(2) |
{1, 2} |
top(num) |
返回 RDD 中的前 num 個元素 | rdd.top(2) |
{3, 3} |
takeOrdered(num)(ordering) |
基於 ordering 返回 num 個元素 | rdd.takeOrdered(2)(myOrdering) |
{3, 3} |
takeSample(withReplacement, num, [seed]) |
隨機返回 num 個元素 | rdd.takeSample(false, 1) |
不確定 |
reduce(func) |
並行地組合 RDD 中的元素(比如,sum) | rdd.reduce((x, y) => x + y) |
9 |
fold(zero)(func) |
與 reduce() 一樣只是需要提供一個 0 |
rdd.fold(0)((x, y) => x + y) |
9 |
aggregate(zeroValue)(seqop, combop) |
與 reduce() 相似,不過用於返回不同型別 |
rdd.aggregate((0, 0))((x, y) => (x._1 + y, x._2 + 1), (x, y) => (x._1 + y._1, x._2 + y._2)) |
(9, 4) |
foreach(func) |
將 func 應用到 RDD 中的每一個元素 | rdd.foreach(func) |
無 |
以上內容參見 <<Learning Spark>>, 其程式碼示例可在 GitHub 上找到 learning-spark.
相關文章
- spark學習筆記--RDD鍵對操作Spark筆記
- Spark RDD APISparkAPI
- spark-RDDSpark
- Spark RDD使用詳解--RDD原理Spark
- Spark - [03] RDD概述Spark
- Spark效能優化:對RDD持久化或CheckPoint操作Spark優化持久化
- Spark 的核心概念 RDDSpark
- Spark運算元:RDD基本轉換操作map、flatMapSpark
- Spark開發-spark執行原理和RDDSpark
- SparkSQL /DataFrame /Spark RDD誰快?SparkSQL
- Spark RDD 特徵及其依賴Spark特徵
- spark學習筆記--RDDSpark筆記
- Spark RDD的預設分割槽數:(spark 2.1.0)Spark
- Spark RDD在Spark中的地位和作用如何?Spark
- Spark(十三) Spark效能調優之RDD持久化Spark持久化
- Spark學習(二)——RDD基礎Spark
- 【大資料】Spark RDD基礎大資料Spark
- spark RDD,reduceByKey vs groupByKeySpark
- Spark RDD中Runtime流程解析Spark
- spark常用RDD介紹及DemoSpark
- Spark從入門到放棄---RDDSpark
- 快取Apache Spark RDD - 效能調優快取ApacheSpark
- 大白話講解Spark中的RDDSpark
- RDD程式設計 上(Spark自學三)程式設計Spark
- RDD程式設計 下(Spark自學四)程式設計Spark
- Spark開發-RDD介面程式設計Spark程式設計
- Calcite 使用原生的RDD 處理SparkSpark
- spark RDD運算元(五)之鍵值對聚合操作combineByKeySpark
- Spark運算元:RDD行動Action操作學習–countByKey、foreach、sortBySpark
- Spark SQL中的RDD與DataFrame轉換SparkSQL
- 大資料學習—Spark核心概念RDD大資料Spark
- Spark----RDD運算元分類 DAGSpark
- Spark開發-RDD分割槽重新劃分Spark
- Spark RDD詳解 | RDD特性、lineage、快取、checkpoint、依賴關係Spark快取
- SparkCore-RDD持久化操作Spark持久化
- Spark RDD運算元(八)mapPartitions, mapPartitionsWithIndexSparkAPPIndex
- spark: RDD與DataFrame之間的相互轉換Spark
- RDD的詳解、建立及其操作