持久化
rdd.cashe()--缓存,存在内存中
rdd.persist(StroageLevel.DIST_ONLY)
--缓存在文件中,传参表示缓存级别,不传参表示存在内存。级别如下:
持久化不一定只用来数据重用,在数据比较重要而执行过程较长的环节中也可以持久化
存为文件会在执行完成后删除
检查点
checkpoint,需要落盘,指定路径(一般为hdfs中)
数据会长期存储
一般情况和cash联合使用:
rdd.cashe()
rdd.checkpoint()
分区器
自带的分区器:HashPartitioner、RangePartitioner
自定义分区器:
class myPartitioner extends Partitioner{
//分区数
override def numPartitions: Int = 3
//返回分区索引,从0开始【根据数据的key,返回分区索引】
override def getPartition(key: Any): Int = {
key match {
case "aaa" =>0
case "bbb"=>1
case "ccc"=>2
}
}
}
存在问题:
在本地文件系统中缓存后再collect读取rdd正常,但是从远程hdfs读取rdd正常,但是collect异常。
缓存后的rdd可以正常take,foreach等非全量读取,但是无法collect。问题暂未解决