假设有一个 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, 分别包含了 {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) |
假设有一个 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.