RDD(弹性分布式数据集)作为 spark 的核心概念, RDD 其实就是一个不可变的分布式的元素集合
什么是弹性: 在任何实收都能进行重新计算, 当保存 RDD 数据的一台机器挂了, spark 还可以使用这种特性来重新计算出丢掉的分区, 对用户也完全透明.
每个 RDD 都被分为多个分区, 这些分区运行在集群中的不同节点
创建 RDD 的方式有多种, 一是主要读取一个外部的数据集, 二是在驱动器程序中的对象集合.
创建出 RDD 之后, 支持两种类型的操作: transformation 和 action 操作. 转化操作由一个 RDD 生产一个新的 RDD, 但只会惰性计算这些 RDD,action 操作才是真正计算最终结果的.
spark 的 RDD 会在每次对他们进行 action 操作时重新计算, 如果想在多个 action 操作中重用同一个 RDD, 可以使用 cache()或是 RDD.persist()来将这个 RDD 缓存起来. 我们也可以将数据缓存到不同的地方, 比如, 磁盘或是内存. 如果所有操作都结束, 则可以调用 stop()操作结束.
eg 举例如下:
- >>> val rdd = sc.parallelize(Seq(("hadoop",3), ("spark",2), ("hive",1), ("hbase",3), ("java",2)))
- >>> val resRdd= rdd.filter(_._2 == 3)
- >>> resRdd.persist()
- >>> resRdd.count()
- >>> resRdd.first()
大概的 spark 程序工作方式:
从外部数据集或驱动程序中创建出 RDD.
使用 filter(),flatMap()等 transformation 操作对 RDD 进行转化, 定义新的 RDD.
将重用的中间结果 RDD 进行 cache()或是 persist()操作 (cache() 和使用默认级别的 persist()操作是相同意思的).
使用 action 操作来触发一次并行计算.
spark 中文官网(学习 spark 最好的方式就是读官方文档)
来源: http://www.bubuko.com/infodetail-2912375.html