mapReduce (MR)必须编程完成后才能统一提交执行;只能使用java语言编程
RDD:容错性分布数据,SPARK CORE:是spark生态圈的核心,它的任务就是对这些数据进行分布式计算
RDD类型:
1.并行集合(分布式化的数据对象,类比Python中的list),通过代码直接传一个列表进去,进行数据分析。
并行化集合(我们处理的是RDD数据,所有对于集合而言,第一步需要并行化)parallelize(list),可以看到我们的集合已经成功并行化
对RDD的操作
变换:( 返回值仍是RDD,但是只有等到Actions操作时才会真正计算给出结果--Lazy Evaluation(懒操作)),执行到该条命令时,只会检测基本语法错误,不计算结果,而是把它保存起来,当你需要把它转换成Python可视化类型时,才会真正执行这条命令,计算出结果。
操作:(返回值是非并行化(不是RDD类型)的数据集合如Python的list),立即执行该变量保存所有的命令(前置条件),并将结果改成可视化类型。 注:如果在执行前置条件时发生错误,报错信息会指向操作行,而不是变换行。
变换(懒操作):在 worker(客户端)运行
map() 循环执行该层列表里每一个元素
flatMap() 循环该列表所有层的元素,如果检测某一个元素是元组列表字典类型,就会去循环执行这个元素里面的元素
filter()过滤 删除
reduce() 相加
reduceByKey()对相同键的值进行操作
groupByKey() 按键进行分组
countByValue():元素出现的次数
操作(actions):立即执行(driver:服务器)
take(n):从RDD返回n个元素
top(num):从RDD返回最大的num个数的元素
first():返回RDD第一个元素
collect():从RDD返回所有元素
count()返回行数
reduce()参数是一个函数,这个函数有两个参数(首先会分区(默认分区数量与虚拟机的核心数有关,我的是2),然后每个分区得出结果最后汇总),两个参数分别是每次分区后两个分区的结果。
map()函数需要一个参数,参数是一个函数,简单理解:将RDD的每一个元素取出,分别通过对这个函数变换之后,返回一个新的RDD。这里使用匿名函数(lambda),给RDD每一个元素执行加一的变换,最后通过collect()操作查看结果
flatMap()
传入的函数的返回值一定要是可迭代的对象(比如元组,集合,列表等)对RDD每一个元素执行函数变换,返回一个迭代器,最后展平结果
filter():参数同样是一个函数,作用是过滤元素,执行过程:将RDD每一个元素执行你书写的条件判断语句,只有结果为True才返回。
union() 合并
intersection()交集
subtract() 差集 1—2公共的,多余的
cartesian()迪卡尔集,第一个跟第二个每一个配一遍,结果以列表形式呈现
加法:
第一次结果:[3,7]
最后结果:10
减法:
分区:[(1,2),(3,4)]
第一次结果:[-1,-1]
最后结果:0
我们会发现减法分区后的结果会发生变化,分区数量不同导致结果不同。
加法和乘法分区后(元素位置变换)结果相同,减法和除法分区后(元素位置变换)结果不同。所以我们在运用时需注意。
csv文件格式,liunx里最好是csvtextFile
在sortByKey()当参数为False是降序,为True是升序
groupByKey()出来的是一个地址,需要for循环