Spark RDD操作(Python)总结

来源:互联网 发布:自动识别验证码软件 编辑:程序博客网 时间:2024/05/14 15:36

Spark 提供了很多Transformation用于创建RDD,总结如下(Python)

map(func)

将原RDD中每个元素代入带入func

123
>>> rdd = sc.parallelize([1, 2, 3])>>> rdd.map(lambda x: x*x).collect()[1, 4, 9]

filter(func)

返回包含所有在func中结果为True

123
>>> rdd = sc.parallelize([1,2,3])>>> rdd.filter(lambda x: x > 2).collect()[3]

flatMap(func)

将原RDD中的每一个元素映射为0个或者多个元素,每次map过程的返回值必须是集合(可空)

1234
>>> rdd = sc.parallelize([1,2,3])>>> rdd.flatMap(lambda x: range(1, x))// [] || [1] || [1 2][1, 1, 2]

mapPartitions(func)

func方法分别应用于各个分区

12345
>>> 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

12345
>>> 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 随机种子数

123
>>> rdd = sc.parallelize(range(100))>>> rdd.sample(False, 0.2, 81).count()24

union(RDD)

合并两个已有的RDD,返回新一个的新的RDD

intersection(RDD)

求两个RDD的交集,并去重,会引发洗牌操作

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

0 0
原创粉丝点击