Spark入门: RDD的顾名思义

2016年08月15日 9425点热度 1人点赞 0条评论

Spark的RDD一直不是非常好理解,但是不理解RDD就没法深入理解Spark

下面是官网的官方解释:

Spark revolves around the concept of a resilient distributed dataset (RDD), which is a fault-tolerant collection of elements that can be operated on in parallel. There are two ways to create RDDs: parallelizing an existing collection in your driver program, or referencing a dataset in an external storage system, such as a shared filesystem, HDFS, HBase, or any data source offering a Hadoop InputFormat.

中文大致翻译:(From InfoQ: http://www.infoq.com/cn/articles/spark-core-rdd/

RDD,全称为Resilient Distributed Datasets,是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。在这些操作中,诸如map、flatMap、filter等转换操作实现了monad模式,很好地契合了Scala的集合操作。除此之外,RDD还提供了诸如join、groupBy、reduceByKey等更为方便的操作(注意,reduceByKey是action,而非transformation),以支持常见的数据运算

 

这个解释还是太长了~

我们首先从名字来看几个重点:

  • DataSets
    • 顾明思议,这是一个数据集!里面存放的是数据
  • Distributed:
    • 分布式。 Spark本来就是一个分布式的计算框架。 这是一个分布式的数据集并不奇怪。重要的是,这个分布式是容错性的基础容错性。 这一点跟Hadoop等非常类似。
  • Resilient:
    • 中文解释: 弹性。这个可能是3个单词里面最难解释、最难理解的了。
    • 举个例子:比如你下班之前启动了一个job,预计明天上班来的时候已经完成了。但是结果,发现job之中的一个sub-task失败了!于是整个job都失败,只能全部重来。 Spark的一个犀利的地方就是,其中一个sub-task失败之后,还可以将整个task放到其他机器自动重新运行。第二天来上班的时候可以看到,虽然有failed tasks 但是整体运算还是正常结束。这就是Resilient的意思

 

当然,从功能角度上来看,RDD提供了一些操作,分类transformation与action两大类。

  • Transformations
    • filter
    • select
    • drop
    • intersect
    • join
  • Action
    • count
    • collect
    • show
    • head
    • take

 

具体各自API的使用,就不是本文的重点了。 希望这个解释对大家有用

 

 

RangerWolf

保持饥渴的专注,追求最佳的品质

文章评论