Spark Basic RDD 操作示例

来源:互联网 发布:mac怎么更改u盘格式 编辑:程序博客网 时间:2024/06/05 20:18

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.

原创粉丝点击