RDD基础知识

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 举例如下:
1 >>> val rdd = sc.parallelize(Seq(("hadoop",3), ("spark",2), ("hive",1), ("hbase",3), ("java",2)))
2 >>> val resRdd= rdd.filter(_._2 == 3)
3 >>> resRdd.persist()
4 >>> resRdd.count()
5 >>> resRdd.first()

大概的spark程序工作方式:

  1. 从外部数据集或驱动程序中创建出RDD.
  2. 使用filter(),flatMap()等transformation操作对RDD进行转化,定义新的RDD.
  3. 将重用的中间结果RDD进行cache()或是persist()操作(cache()和使用默认级别的persist()操作是相同意思的)。
  4. 使用action操作来触发一次并行计算。

http://spark.apachecn.org/docs/cn/2.2.0/sql-programming-guide.html
spark中文官网(学习spark最好的方式就是读官方文档)

posted on 2019-01-07 23:33  mengqiD龙  阅读(170)  评论(0编辑  收藏  举报