[TOC]
这篇文章参考《Spark快速大数据分析》,归纳spark技术核心的rdd及MLlib以及其中几个重要库的使用。
初始化操作
spark shell: bin/pyspark
每个spark应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作,驱动器程序包含应用的main函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作,驱动器程序通过一个sparkcontext对象来访问spark(sc),这个对象代表对计算集群的一个连接。可以用它来创建rdd.
sc.textFile(“file-name”) #创建一个代表文件的rdd
sc.parallelize([,,])#把一个已有的集合传递给spark
bin/spark-submit python-file.py
#初始化sparkContext:
from pyspark import SparkConf,SparkContext
conf=SparkConf().setMaster(“local”).setAppName(“MYAPP”)
SC=SparkContext(conf=conf)
Rdd
rdd有两种操作:转化操作和行动操作,转化操作会由一个rdd生成一个新的rdd,行动操作会对rdd计算出一个结果。spark惰性计算转化操作,只有在第一个行动操作中用到时,才会真正计算。
常见的Rdd转化操作
- map():接收一个函数,把这个函数用于rdd的每个元素,将函数的返回结果作为结果rdd中对应元素的值。lambda表达式
- filter():接收一个函数,并将rdd中满足该函数的元素放入新的rdd中返回。
- flatmap():每个输入元素生成多个输出元素,一个简单应用是把输入的字符串切分为单词。
- distinct():生成一个只包含不同元素的新rdd。开销很大,因为它需要将所有数据通过网络进行混洗(shuffle).
- union(other):返回一个包含两个rdd中所有元素的rdd,会重复
- intersection(other):返回两个rdd中都有的元素。会去重复
- substract(other):只存在第一个rdd中,不存在第二个rdd中的,会suffle
- cartesian(other):计算笛卡尔集,返回所有可能的(a,b)对,用途:用户对各种产品的预期兴趣度,自身做笛卡尔积,用于求用户相似度的应用中。-开销大
- sample(with replacement,fraction,[seed]),采样rdd以及是否替换
常见的rdd行动操作
- collect():返回rdd中所有的元素
- count():rdd中元素
- countByvalue():各元素在rdd中出现的次数
- take(num):从rdd中返回num个元素
- top(num):返回最前面的num个元素
- takeOrderd(num)(ordering-func):从rdd中按照提供的顺序返回最前面的num个元素
- ruduce(func): 并行整合rdd中的所有数据
- fold(zero)(func):与reduce一样,但是需要提供初始值
- aggregate(zerovalue(seqop,combop))和reduce相似,但是通常返回不同类型的函数
- foreach(func):对rdd中每个元素使用给定的函数
键值对操作 pair Rdd
提供了并行操作各个键或跨节点重新进行数据分组的操作接口。
reduceByKey()可以分别规约每个键对应的数据
join()把两个rdd中键相同的元素组合在一起
创建pair rdd
把普通的rdd转换成pair rdd,map操作传递的函数需要返回键值对
pairs=lines.map(lambda x: (x.split(“”)[0],x))
转化操作:
reduceByKey() 合并具有相同键的值
groupB