RDD的常用转换算子
在Spark中,RDD的转换算子是用于生成新的RDD的操作,所有的转换都是惰性执行的。以下是一些常用的RDD转换算子:
1. `map`
对RDD中的每个元素应用一个函数,生成一个新的RDD。
val rddMapped = rdd.map(x => x * 2)
2. `filter`
根据给定的条件过滤RDD中的元素,返回满足条件的新RDD。
val rddFiltered = rdd.filter(x => x > 2)
3. `flatMap`
类似于`map`,但每个输入元素可以映射为0或多个输出元素,结果是一个扁平化的RDD。
val rddFlatMapped = rdd.flatMap(x => Seq(x, x * 2))
4. `reduceByKey`
用于键值对RDD,根据键对值进行归约操作。
val rddPair = sc.parallelize(Seq(("a", 1), ("b", 2), ("a", 3)))
val rddReduced = rddPair.reduceByKey((x, y) => x + y)
5. `groupByKey`
将键值对RDD中的值按键分组,生成一个新的RDD,其中每个键对应一个值的集合。
val rddGrouped = rddPair.groupByKey()
6. `distinct`
返回一个去重后的RDD,消除重复元素。
val rddDistinct = rdd.distinct()
7. `union`
合并两个RDD,生成一个新的RDD。
val rdd1 = sc.parallelize(Seq(1, 2, 3))
val rdd2 = sc.parallelize(Seq(4, 5, 6))
val rddUnion = rdd1.union(rdd2)
8. `intersection`
返回两个RDD的交集,生成一个新的RDD。
val rddIntersection = rdd1.intersection(rdd2)
9. `subtract`
返回第一个RDD中存在而第二个RDD中不存在的元素。
val rddSubtracted = rdd1.subtract(rdd2)
10. `sample`
随机抽样生成一个新的RDD。
val rddSampled = rdd.sample(withReplacement = false, fraction = 0.5)
11. `sortBy`
根据指定的键对RDD进行排序,生成一个新的RDD。
val rddSorted = rdd.sortBy(x => x)
这些转换算子提供了强大的数据处理能力,可以帮助你根据需要对数据进行各种操作。由于这些操作是惰性执行的,只有在触发行动操作(如`collect`、`count`等)时才会实际计算。