前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pyspark学习笔记(四)---弹性分布式数据集 RDD [Resilient Distribute Data](下)

Pyspark学习笔记(四)---弹性分布式数据集 RDD [Resilient Distribute Data](下)

作者头像
TeeyoHuang
发布2021-05-10 11:10:31
4440
发布2021-05-10 11:10:31
举报

Pyspark学习笔记(四)—弹性分布式数据集 RDD [Resilient Distribute Data](下)

在这里插入图片描述
在这里插入图片描述

9.基本的RDD操作

Ⅰ.常见的转化操作

map

代码语言:javascript
复制
map(func, preservesPartitioning=False)

最基本的转化操作,对数据集中的每一个元素,应用一个具名/匿名 函数进行才处理; 一个或多个map可以异步进行,因为它们不会产生副作用。

代码语言:javascript
复制
rdd = sc.parallelize(["b", "a", "c"])
sorted(rdd.map(lambda x: (x, 1)).collect())

output- [('a', 1), ('b', 1), ('c', 1)]

flatMap

代码语言:javascript
复制
flatMap(func, preservesPartitioning=False)

与map的操作类似,但会进一步拍平数据,表示会去掉一层嵌套

代码语言:javascript
复制
rdd = sc.parallelize([2, 3, 4])
sorted(rdd.flatMap(lambda x: range(1, x)).collect())
output: [1, 1, 1, 2, 2, 3]
sorted(rdd.flatMap(lambda x: [(x, x), (x, x)]).collect())
output: [(2, 2), (2, 2), (3, 3), (3, 3), (4, 4), (4, 4)]

filter

代码语言:javascript
复制
filter(func)

一般是依据括号中的一个布尔型表达式,来筛选出满足为真的元素

代码语言:javascript
复制
rdd = sc.parallelize([1, 2, 3, 4, 5])
rdd.filter(lambda x: x % 2 == 0).collect()
[2, 4]

distinct

代码语言:javascript
复制
distinct(numPartitions=None)

去重操作

代码语言:javascript
复制
sorted(sc.parallelize([1, 1, 2, 3]).distinct().collect())
[1, 2, 3]

group by

代码语言:javascript
复制
groupBy(func, numPartitions=None, partitionFunc=<function portable_hash>)

依据func 中提供的条件,对原始RDD进行分组聚合

代码语言:javascript
复制
rdd = sc.parallelize([1, 1, 2, 3, 5, 8])
result = rdd.groupBy(lambda x: x % 2).collect()
sorted([(x, sorted(y)) for (x, y) in result])
[(0, [2, 8]), (1, [1, 1, 3, 5])]

sortBy

代码语言:javascript
复制
sortBy(keyfunc, ascending=True, numPartitions=None)

依据 keyfunc 对原RDD进行排序

代码语言:javascript
复制
tmp = [('a', 1), ('b', 2), ('1', 3), ('d', 4), ('2', 5)]
sc.parallelize(tmp).sortBy(lambda x: x[0]).collect()
[('1', 3), ('2', 5), ('a', 1), ('b', 2), ('d', 4)]
sc.parallelize(tmp).sortBy(lambda x: x[1]).collect()
[('a', 1), ('b', 2), ('1', 3), ('d', 4), ('2', 5)]

Ⅱ.基本的RDD行动操作

count

代码语言:javascript
复制
 count()

不接收参数,返回一个long类型的值,代表RDD中的元素个数

代码语言:javascript
复制
sc.parallelize([2, 3, 4]).count()
3

collect

代码语言:javascript
复制
collect()

输出一个由RDD中所有元素组成的列表 一般只在小规模数据中使用,避免输出一个过大的列表

take

代码语言:javascript
复制
take(n)

返回RDD的前n个元素(随机的)

top

代码语言:javascript
复制
top(n, key=None)

和top的功能类似,但是top会将元素排序并按照降序输出。

first

代码语言:javascript
复制
fisrt()

返回RDD中的第一个元素,与take(1)很相似,但是不同之处在于: take(1)返回的是由一个元素组成的列表; 而first( ) 返回的只是一个具体的元素

reduce

代码语言:javascript
复制
reduce(func)

使用指定的满足交换律结合律的运算符,来归约RDD中的所有元素。

foreach

代码语言:javascript
复制
foreach(func)

对数据集中的每一个元素应用具名/匿名函数,与map类似,但是不同之处在于: map是转化操作,无法输出;而foreach是行动操作,可以有输出函数

Ⅲ.其他操作

RDD同样也有连接操作、集合操作,在这里就不展开讲了。 简单介绍一下数值型RDD的操作:

min

Min(key=None) 返回RDD最小值的行动操作,可以通过参数key指定一个函数,它根据生成值进行比较获得最小值。

max

Max(key=None) 返回RDD最大值的行动操作,可以通过参数key指定一个函数,它根据生成值进行比较获得最大值。

mean()

返回数值型RDD的算术平均数。

sum()

返回数值的和

stdev

返回数值型RDD中一组数据的标准差。

variance()

返回RDD中一组数据的方差。

stats()

返回StatCounter对象,一次调用即可获得这样一个包括count(), mean(),stdev(), max(), min()的结构。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.基本的RDD操作
    • Ⅰ.常见的转化操作
      • map
      • flatMap
      • filter
      • distinct
      • group by
      • sortBy
    • Ⅱ.基本的RDD行动操作
      • count
      • collect
      • take
      • top
      • first
      • reduce
      • foreach
    • Ⅲ.其他操作
      • min
      • max
      • mean()
      • sum()
      • stdev
      • variance()
      • stats()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档