Spark 提供了很多Transformation
用于创建RDD
,总结如下(Python)
map(func)
将原RDD中每个元素代入带入
func
1 2 3 | >>> rdd = sc.parallelize([1, 2, 3]) >>> rdd.map(lambda x: x*x).collect() [1, 4, 9] |
filter(func)
返回包含所有在
func
中结果为True
1 2 3 | >>> rdd = sc.parallelize([1,2,3]) >>> rdd.filter(lambda x: x > 2).collect() [3] |
flatMap(func)
将原RDD中的每一个元素映射为0个或者多个元素,每次map过程的返回值必须是集合(可空)
1 2 3 4 | >>> rdd = sc.parallelize([1,2,3]) >>> rdd.flatMap(lambda x: range(1, x)) // [] || [1] || [1 2] [1, 1, 2] |
mapPartitions(func)
将
func
方法分别应用于各个分区
1 2 3 4 5 | >>> rdd = sc.parallelize([1,2,3,4], 2) // 两个分区的数据分别为 [1,2] [3,4] >>> def f(x): yield sum(x) >>> rdd.mapPartitions(f).collect() [3, 7] |
mapPartitionsWithIndex(func)
和mapPartitions方法一样,
func
传入参数增加index
1 2 3 4 5 | >>> rdd = sc.parallelize([1,2,3,4], 2) >>> def f(i, x): yield i*sum(x) >>> rdd.mapPartitionsWithIndex(f).collect() //[0*(1+2), 1*(3+4)] [0, 7] |
sample(withReplacement, fraction, seed)
对已有的RDD进行采样,
withReplacement
布尔型, 表示是否用随机值替换
fraction
采样比例
seed
随机种子数
1 2 3 | >>> rdd = sc.parallelize(range(100)) >>> rdd.sample(False, 0.2, 81).count() 24 |
union(RDD)
合并两个已有的RDD,返回新一个的新的RDD
intersection(RDD)
求两个RDD的交集,并去重,会引发洗牌操作
1 2 3 4 | >>> rdd1 = sc.parallelize([1, 2, 3, 4]) >>> rdd2 = sc.parallelize([3, 4, 5, 6]) >>> rdd1.intersection(rdd2).collect() [3,4] |
distinct()
对RDD的元素去重
groupByKey()
作者: VALUX
链接: http://valux.cn/2015/05/11/bc7bf5dca5cd6d8f/
本文基于署名-非商业性使用-相同方式共享 2.5中国大陆许可协议发布,转载请保留本文的署名 Valux 和 原文链接