Spark Core核心----RDD常用算子编程

1、RDD常用操作2、Transformations算子3、Actions算子4、SparkRDD案例实战

1、Transformations算子(lazy)

含义:create a new dataset from an existing on 从已经存在的创建一个新的数据集

RDDA---------transformation----------->RDDB

  • map:map(func)

将func函数作用到数据集的每一个元素上,生成一个新的分布式的

数据集返回

例子:1

data = [1, 2, 3, 4, 5]
rdd1 = sc.parallelize(data)
rdd2 = rdd1.map(lambda x:x*2)
print(rdd2.collect())

例子2:

a = sc.parallelize(["dog","tiger","lion","cat","panther","eagle"]).map(lambda x:(x,1))
print(a.collect())

 

结果:

  • filter(过滤)filter(func)

选出所有func返回值为true的元素,生成一个新的分布式数据集返回

例子:

RDDA = sc.parallelize([1, 2, 3, 4, 5]).map(lambda x:x*2).filter(lambda x:x>5)
print(RDDA.collect())

结果:

  • flatMap()    flatMap(func)

输入的item能够被map到0或者多个items输出,返回值是一个Sequence          (拆分)

data = ["hello spark","hello word","hello word"]
RDD = sc.parallelize(data)
print(RDD.flatMap(lambda line:line.split(" ")).collect())

结果

  • groupByKey()(把相同的key的数据分发到一起)

data = ["hello spark", "hello word", "hello word"]
RDD = sc.parallelize(data)
RDD2 = RDD.flatMap(lambda line:line.split(" ")).map(lambda x:(x,1))
RDD3 = RDD2.groupByKey()
print(RDD3.map(lambda x:{x[0]:list(x[1])}).collect())

结果

  • reduceByKey(把相同的key的数据分发到一起,并进行相应的计算)

data = ["hello spark", "hello word", "hello word"]
RDD = sc.parallelize(data)
RDD2 = RDD.flatMap(lambda line: line.split(" ")).map(lambda x: (x, 1))
RDD3 = RDD2.reduceByKey(lambda a,b:a+b)
print(RDD3.collect())

结果

  • sortByKey()默认按照key值升序排列

data = ["hello spark", "hello word", "hello word"]
RDD = sc.parallelize(data)
RDD2 = RDD.flatMap(lambda line: line.split(" ")).map(lambda x: (x, 1))
RDD3 = RDD2.reduceByKey(lambda a, b: a + b)
sortRDD = RDD3.sortByKey()
sortRDD.collect()

结果

加False参数降序排列

实现按照数字排序

使用map交换一下顺序

  • union连接(把RDD连接起来)

a = sc.parallelize([1, 2, 3])
b = sc.parallelize([4, 5, 6])
a.union(b).collect()

结果

  • distinct(去除重复)

a = sc.parallelize([1, 2, 3])
b = sc.parallelize([4, 3, 3])
a.union(b).distinct().collect()

结果

  • join(内连接,左外连接,右外连接)

a = sc.parallelize([("A","a1"),("C","c1"),("D","d1"),("F","f1"),("F","f2")])
b = sc.parallelize([("A","a2"),("C","c2"),("C","c3"),("E","e1")]) 
a.join(b).collect()               # 内连接
a.rightOuterJoin(b).collect()     # 右外连接
a.leftOuterJoin(b).collect()      # 左外连接
a.fullOuterJoin(b).collect()      # 全连接

内连接:

得到两者key值相同的值的集合

右外连接:以右表key为基准进行连接

左外连接:以左表以右表key为基准进行连接

全连接:左右连接的并集所有的都出来

2、Actions算子

含义:return a value to the driver program after running acomputation on the dataset

data = [1, 2, 3, 4, 5, 6, 7, 8, 9,10]
rdd = sc.parallelize(data)
rdd.count()    # 数量
rdd.take(3)    # 前几个
rdd.max()      # 最大值
rdd.min()      # 最小值
rdd.sum()      # 求和
rdd.reduce(lambda x,y:x+y)    # 求和
rdd.foreach(lambda x:print(x))    #foreach遍历
rdd.saveAsTextFile        #写入文件系统

 

结果:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫逸风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值