RDD-Resilient Distributed Datasets 弹性分布式数据集

RDD- 弹性分布式数据集

RDD 是Spark技术的核心,接下来我们来探讨RDD中的核心概念和问题。

RDD 创建

这里有三种构建RDD的方式:

1.并行化一个内存中的集合。

第一种方法适用于在少量数据集上,并行执行CPU增强型的计算。并行化的程度由单个机器,或者机器集群所有CPU核的总数所决定。

val params = sc.parallelize(1 to 10)
val result = params.map(performExpensiveComputation)

2.利用存储在硬盘的数据集。

第二种方法是为外部数据集创建一个引用。外部数据可以是位于本地或者HDFS上的文件,格式既可以是文本,也可以是SequenceFile等其他类型的文件。 文件分割的形式和Hadoop 类似,其中每一个HDFS block上,都会有一个Spark 分区。

val text: RDD[String] = sc.textFile(inputPath)
sc.textFile(inputPath, 10)

3.转化一个已经存在的RDD。

RDD 转换和行动

Spark 为RDD提供了两种操作,转换和行动。转换是从现存的RDD中产生新的RDD,行动则会在RDD上触发一些计算,计算结果会返回给用户或者存储到外部设备。行动是即时的效果,但转换是惰性的,直到有行动作用在RDD上,转换才会触发。

判断操作是转换还是行动的方法就是看他们返回的类型:转换会返回RDD,返回其他类型则是行动。

聚集转换

reduceByKey(),foldByKey(),aggregateByKey()是三种聚集转换的方法,他们都可以将(K1, List(V1)) 转换为 List(K2, V2)。值得注意的是,在分布式系统中,他们会运行在不同的分区和任务上,他们的执行顺序不会对结果产生影响。

//reduceByKey
val pairs: RDD[(String, Int)] = sc.parallelize(Array(("a", 3), ("a", 1),
                                ("b", 7), ("a", 5)))
val sums: RDD[(String, Int)] = pairs.reduceByKey(_+_)
assert(sums.collect().toSet === Set(("a", 9), ("b", 7)))
//foldByKey

你可能感兴趣的:(Spark,Spark,RDD,Hadoop)