PySpark----Transformation操作

1.cache()

使用默认的缓存级别MEMORY_ONLY将数据进行持久化

持久化级别由如下的取值:

可以调用rdd上的getStorageLevel获取当前rdd对应的持久化级别
from pyspark import *
import numpy as np
rdd = sc.parallelize(np.arange(10),3)
rdd.getStorageLevel()
rdd.cache()
rdd.getStorageLevel()

2.persist(storageLevel=StorageLevel(False, True, False, False, 1))

这个方法可以使用关键字参数 storageLevel指定缓存级别。默认的缓存级别是MEMORY_ONY,设置之后可以调用rdd上的is_cached 属性确认是否已经将RDD数据持久化。持久化选项如"1"中所示。

unpersist()和persist相反,该方法取消RDD的持久化,并从memoryManager中删除对应的持久化的 block信息。

3.cartesian(other)

当前rdd和"other"rdd原始的笛卡尔积,返回的是两个RDD元素两两组合的二元tuple

4.checkpoint()

设置检查点,该操作将切断该RDD的所有父依赖。调用该方法之前,首先要调用 SparkContext.setCheckpointDir()这个方法设置检查点的存储在HDFS上的位置,强烈建议将该RDD的 缓存级别设置为内存级别,否则的话由于依赖链断裂,如果再次使用到该RDD的话,将会从磁盘中的检 查点目录中再次读取数据,会耗费IO及CPU资源。在一些重要的计算节点设置checkpoint是一个好的习 惯,这样可以有效的进行异常错误的快速恢复。

sc.setCheckpointDir('/datas/checkpoint/')
rdd1 = sc.parallelize(range(10),3)
rdd2 = sc.parallelize(range(10),2)
rdd3 = rdd1.cartesian(rdd2)
rdd3.checkpoint()

这里注意:上面代码应该在checkpoint()之前先进行缓存

5.coalesce(numPartitions, shuffle=False)

调用该方法对RDD进行重分区,分区数会影响作业的并行 度,因此会视作业的具体情况设置合理的并行度。这个方法有一个关键字参数shuffle,默认为False,因 他的重分区行为不会涉及到shuffle操作,效率较高,若设置为True,效果和repartition方法类似,效率较低。

repartition(numPartitions):该方法也是用于对RDD进行重分区,其内部使用的是Shuffle重新分区数 据,如果说你要减少RDD中分区的数量,推荐使用coalesce方法

partitionBy(numPartitions, partitionFunc=portable_hash):使用给定分分区方法将RDD分 为numPartitions个。partitionFunc为可选参数,若未指定,其效果同repartition,默认使用基于shuffle的 机制重新分区数据。 
案例:
    rdd = sc.parallelize(range(10),6)
    pairs = rdd.map(lambda x:(x,x**2+1))
    print(pairs.getNumPartitions())
    print(pairs.glom().c
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值