目录:
简介
pyspark
IPython Notebook
安装
配置
spark编写框架:
首先开启hdfs以及yarn
1 sparkconf
2 sparkcontext
3 RDD(核心)
4 transformation(核心)
5 action(核心)
当然也可以指定运行py程序
不可否认,spark是一种大数据框架,它的出现往往会有Hadoop的身影,其实Hadoop更多的可以看做是大数据的基础设施,它本身提供了HDFS文件系统用于大数据的存储,当然还提供了MR用于大数据处理,但是MR有很多自身的缺点,针对这些缺点也已经有很多其他的方法,类如针对MR编写的复杂性有了Hive,针对MR的实时性差有了流处理Strom等等,spark设计也是针对MR功能的,它并没有大数据的存储功能,只是改进了大数据的处理部分,它的最大优势就是快,因为它是基于内存的,不像MR每一个job都要和磁盘打交道,所以大大节省了时间,它的核心是RDD,里面体现了一个弹性概念意思就是说,在内存存储不下数据的时候,spark会自动的将部分数据转存到磁盘,而这个过程是对用户透明的。
spark安装及配置部分可以参看:https://mp.csdn.net/postedit/82346367
下面介绍的例子都是以python为框架
因为spark自带python API即pyspark,所以直接启动即可
很简单使用pyspark便进入了环境:
但是在命令行中总归是不方便,所以下面的案例均在IPython Notebook中进行
使用IPython Notebook开发更加方便
sudo apt-get install ipython
udo apt-get install ipython-notebook
安装好后就可以启动了:
ipython notebook
sudo vim /etc/bash.bashrc
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
source /etc/bash.bashrc
然后再次使用pyspark启动时就会自动启动IPython Notebook啦!!!!!!!!!!
sparkconf对象是是spark应用的配置信息:
是调用spark一切功能的一个接口,使用不同的开发语言对应不同的接口,类如java就是javasparkcontext,SQL就是SQLspark,Python,Scala等等都是如此
这里报错是因为开启了多个SparkContests,所以解决方法是先关闭:
创建初始RDD有三种方法(用textFile时默认是hdfs文件系统):
这里主要就是使用了parallelize方法,至于collect下面会有详细介绍
进行一个wordcount任务
sparktest.txt
这里看不懂没关系,下面都会详细介绍,这里主要知道,可以读取file://本地文件就可以了
注意:在linux上面要使用本地文件时,需要将data.txt拷贝到所有worker。
先要上传一个文件,这里还是上传上面的sparktest.txt吧,进行一个wordcount任务
from pyspark import SparkContext, SparkConf
conf=SparkConf()
conf.setAppName("My app")
sc.stop()
sc = SparkContext(conf=conf)
lines=sc.textFile("hdfs://localhost:9000/sparktest.txt")
words=lines.flatMap(lambda line:line.split(" "))
keyvalue=words.map(lambda word:(word,1))
result=keyvalue.reduceByKey(lambda x,y:x+y)
print(result.collect())
这里也是看不懂没关系,下面都会详细介绍,这里主要知道,可以读取hdfs://本地文件就可以了
注意:使用Hdfs时,在配置Spark时,将setMaster设置的local模式去掉即:
spark中的一些算子都可以看做是transformation,类如map,flatmap,reduceByKey等等,通过transformation使一种GDD转化为一种新的RDD。
一些算子介绍:
可以看到使用map时实际上是[ [0,1,2,3,4],[0,1,2],[0,1,2,3,4,5,6] ]
类如切分单词,用map的话会返回多条记录,每条记录就是一行的单词,
而用flatmap则会整体返回一个对象即全文的单词这也是我们想要的。
在java中返回类型还是一个JavaPairRDD,第一个类型是key,第二个是Iterable里面放了所有相同key的values值
cartesian:
返回一个笛卡尔积的数据集:例如foreach,reduce就是一种action操作,后者是将RDD中多有元素进行聚合,获取最终结果,返回给Drive程序,action 的特性就是触发一个spark job,进一步触发上面的transformation。即在执行action后,Driver才会提交task到之前注册的worker上的executor一步步执行整个spark任务(定义的那些transformation啥的)
action 也有很多:
这个在上面已经充分体现了
first()
: 返回RDD中的第一个元素:takeOrdered(n [, key=None])
:返回经过排序后的RDD中前n个元素
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
WordCount:
from pyspark import SparkContext, SparkConf
conf=SparkConf()
conf.setAppName("My app")
sc = SparkContext(conf=conf)
lines=sc.textFile("hdfs://localhost:9000/sparktest.txt")
words=lines.flatMap(lambda line:line.split(" "))
keyvalue=words.map(lambda word:(word,1))
result=keyvalue.reduceByKey(lambda x,y:x+y)
print(result.collect())
运行:
spark-submit WordCount.py