Spark RDD操作(Python)总结

时间:2021-10-04 20:49:29

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 和 原文链接