2RDD编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2RDD编程相关的知识,希望对你有一定的参考价值。

参考技术A rdd主要通过从各种文件系统中加载数据和通过并行集合(数组)得来。
sc.textFile用于从文件中读取,sc.parallelize用于python对象生成rdd

Spark的SparkContext通过textFile()读取数据生成内存中的RDD,支持本地文件系统、分布式文件系统HDFS及Amazon S3(云端存储服务)等等;

对于RDD而言,每一次转换操作都会产生不同的RDD,供一个操作使用;
转换得到的RDD是惰性求值的,也就是说,整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作时,才会发生真正的计算,从源头开始进行“从头到尾”的计算操作。

filter(func) 筛选出满足函数func的元素,并返回一个新的数据集;
map(func)将每个元素传递到函数func中,并将结果返回为一个新的数据集;
flatMap(func)与map()类似,但每个输入元素都可以映射到0个或多个输出结果;
groupByKey()应用于(key, value)键值对的数据集时,返回一个新的(key, iterable)形式的数据集;
reduceByKey(func)应用于(key,value)键值对的数据集时,返回一个新的(key,value)形式的数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果;

count()返回数据集中的元素个数;
collect()以数组的形式返回数据集中的所有元素;
first()返回数据集中的第一个元素;
take(n)以数组的形式返回数据集中的前n个元素;
reduce(func)通过函数func(输入两个参数并返回一个值)聚合数据集中的元素;
foreach(func)将数据集中的每个元素传递到函数func中运行。

1.可以通过持久化(缓存)机制避免重复计算的开销;
可以使用persist()方法对一个RDD标记为持久化;
之所以说标记为持久化,是因为出现persist()语句的地方,并不会马上计算生成RDD并把他持久化,而是要等到遇到第一个行动操作触发真正计算以后,才会把计算结果持久化;
持久化后的RDD将会被保留在计算节点的内存中被后面的行动操作重复使用。

persist()对一个rdd标记为持久化,并不会马上开始计算生成RDD并把它持久化;动作类型操作才会真正把它持久化。
rdd.persist(MEMORY_ONLY)存储在内存中,内存不足,替换内容;rdd.persist(MEMORY_ONLY)效果同rdd.cache()
rdd.persist(MEMORY_AND_DISK)存储在内存中,内存不足,存放磁盘;
rdd.unpersist()手动把持久化的rdd从缓存中删除;

分区能增加并行度;
减少通信开销;

分区个数尽量等于集群中CPU核心数目;
local模式默认分区个数为本地的CPU个数,若设置了local[N]则为N个;
apache mesos模式分区数目默认为8;
分区设置方法

spark分区有哈希分区、自定义分区及区域分区三种;

统计一个文本文件中每个单词出现的次数

以上是关于2RDD编程的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark基础知识

如何在 spark scala 中加入 2 rdd

spark写入mysql

spark学习---打印RDD内容

大数据—— Spark 优化

scala mapPartitionsWithIndex函数的使用