回顾:关于pyspark RDD的一些理解

写在前面

之前用DF数据类型比较多,RDD相对使用的比较少,回头再看只想说too simple too young。

Transformation 和Action

Transformation转换,对rdd而言,每次转换都会产生新的rdd。
Transformation得到的rdd是惰性求值的,整个转换过程只记录了转换的轨迹,并不是真正的计算,只有遇到Action操作时才会真正计算。
Action:代表的是一个具体的行为,返回的值非RDD类型,可以一个object,或者是一个数值,也可以为Unit代表无返回值,并且action会立即触发job的执行。
常见的操作类型

Transformation操作Action操作
mapreduce
flatmapcollect
reduceByKeycount
groupByKeyfirst
uniontake
jointakeSample
cogroupSaveAsTextFile
sampleSaveAsAequenceFile
cartesiancountByKey
sortBykeyforeach

Transformaton函数

  • map(func,preservesPartitioning=False)
    将原来RDD的每个数据通过map中的用户自定义函数func映射成一个新的元素。返回一个RDD。

  • filter(func)
    选出所有func返回值为true的元素,最为一个新的RDD返回

  • mapreduce

  • flatmap(func, preservesPartitioning=False)
    与map类似,但返回的是所有rdd映射函数func之后的序列集

  • sample(withReplacement, fraction, seed=None)
    withReplacement=true 表示有放回抽样
    fraction为抽样的概率【0,1】
    raction=0.2并不是说明要抽出100个数字中20%的数据作为样本,而是每个数字被抽取为样本的概率为0.2,这些数字被认为来自同一总体,样本的大小并不是固定的,而是服从二项分布
    seed为随机数种子
    返回的是RDD的抽样子集

  • distinct(numPartitions=None)
    返回去重之后的RDD

Action函数

  • c o l l e c t ( ) \color{red}{collect()} collect()
    RDD的所有元素以列表的形式返回
    一般在filter或者 足 够 小 \color{red}{足够小} 的时候用
    因 为 结 果 将 返 回 到 D r i v e r 程 序 所 在 节 点 \color{red}{因为结果将返回到Driver程序所在节点} Driver

  • count()
    返回RDD元素的个数

  • foreach(func)
    RDD的每个元素调用func,不返回RDD或者list

  • reduce(func)

  • first()
    返回数据集中的第一个元素

  • take(num)
    以 数 组 的 形 式 返 回 数 据 集 中 前 n 个 元 素 , 需 要 注 意 的 是 这 一 a c t i o n 并 不 是 在 多 个 n o d e 上 并 行 执 行 的 , 而 是 在 d r i v e r 程 序 所 在 的 机 器 上 单 机 执 行 , 会 增 大 内 存 的 压 力 , 使 用 时 需 谨 慎 \color{red}{以数组的形式返回数据集中前n个元素,需要注意的是这一action并不是在多个node上并行执行的,而是在driver程序所在的机器上单机执行,会增大内存的压力,使用时需谨慎} nactionnodedriver使
    -countBykey()
    计 算 每 个 元 素 的 个 数 , 以 字 典 的 形 式 返 回 到 m a s t e r \color{red} 计算每个元素的个数,以字典的形式返回到master master

spark RDD官方文档

map 和 flatMap的区别

map(f, preservesPartitioning=False)[source]
Return a new RDD by applying a function to each element of this RDD.

flatMap(f, preservesPartitioning=False)[source]
Return a new RDD by first applying a function to all elements of this RDD, and then flattening the results.

flaMap 是先map再扁平化
即将所有对象合并为一个对象
eg:

 a=lines.map(lambda x:x.split(" "))
    print(a.collect())
    b=lines.flatMap(lambda x:x.split(' '))
    print(b.collect())

res:
在这里插入图片描述

*ByKey 操作

操作
sortByKey
reduceByKey
reduceByKeyLocally
sampleByKey
subtractByKey
aggregateByKey
combineByKey
countByKey
foldByKey
groupBykey

具体参考spark *ByKey操作

PySpark RDD是一种分布式的数据集,它是PySpark的核心抽象之一。RDD代表弹性分布式数据集(Resilient Distributed Dataset),它是由一系列分区组成的可并行处理的集合。RDD可以包含任何类型的对象,并且可以在集群上进行并行操作。 PySpark RDD可以通过不同的方式创建,其中一种常见的方式是使用`sc.parallelize`方法,该方法可以将Python列表、NumPy数组或Pandas Series/Pandas DataFrame转换为Spark RDD。例如,通过以下代码可以使用列表创建一个RDD: ```python rdd = sc.parallelize([1, 2, 3, 4, 5]) ``` 这将创建一个名为`rdd`的RDD对象,其中包含了列表中的元素。RDD支持各种转换和操作,例如映射、过滤、排序和聚合等。你可以使用这些操作来对RDD进行变换和计算,最终得到你想要的结果。 PySpark提供了丰富的文档来帮助你了解RDD的更多细节和使用方法。你可以参考Spark官方网站的RDD编程指南和PySpark官方文档,它们提供了详细的介绍和示例代码,帮助你更好地理解和使用PySpark RDD。 总结起来,PySpark RDD是一种分布式的可并行处理的数据集,它可以通过不同的方式创建,例如使用`sc.parallelize`方法。RDD支持各种转换和操作,它是PySpark中非常重要的概念之一。 参考文献: Spark官方网站 - RDD编程指南:http://spark.apache.org/docs/latest/rdd-programming-guide.html PySpark官方文档:https://spark.apache.org/docs/latest/api/python/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值