本文主要内容:
最近想学习大数据分析平台Spark,由于实验室设备不足,只能先在本地搭建一个独立式的Spark环境,进行简单分析,逐步探索Spark的奥秘,为以后Spark集群操作打好基础。
对于从事数据挖掘和机器学习人员来说,使用anaconda的ipython notebook无疑是最棒的体验。那么,如何在ipython notebook中使用spark呢?
大数据框架
速度
高级数据处理(实时流处理、机器学习)
Spark附带一些强大的库:
由于这些库满足了很多大数据需求,也满足了很多数据科学任务的算法和计算上的需要,Spark快速流行起来。不仅如此,Spark也提供了使用Scala、Java和Python编写的API;满足了不同团体的需求,允许更多数据科学家简便地采用Spark作为他们的大数据解决方案。
Spark是用Scala写的,整个Spark生态系统需要运行在JVM环境中,并且需要利用本地的HDFS。Hadoop的HDFS是Spark支持的数据存储之一。Spark可以处理不同类型的数据资源、种类、格式等。
PySpark提供了Spark集成的API,并允许在集群中的所有节点上使用Python的生态系统。更重要的是,它提供Python机器学习的库(如sklearn)和数据处理方法(pandas)。
PySpark的工作原理如下图:
更多信息可到官网了解:anaconda
本人使用Ubuntu16.04系统的台式机。若是Windows系统可以使用虚拟机创建Linux环境,具体过程自查Google,这里不再赘述。
具体安装过程自查Google,也可参考本人这篇博客:IPython Notebook介绍及在Ubuntu16.04下的安装使用
# install oracle java 8
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ echo JAVA_HOME
在本地设置和运行Spark非常简单,只需要下载一个预构建的包。另外只要安装Java SDK和Python就可以在Windows、Linux、Mac上运行Spark。直接到Spark下载页面进行下载:Spark官网下载
具体操作:
接下来,对下载文件进行操作:
tar -xf spark-2.0.0-bin-hadoop2.7
rm spark-2.0.2-bin-hadoop2.7.tgz
sudo mv spark-2.0.0-bin-hadoop2.7 ~/spark
至此,Spark安装已完成。如果你的安装过程没有错误的话,运行下列命令:
#run spark
$ cd ~/spark
$ ./bin/pyspark
你将会看到界面出现一个类似Spark的图标:
$ sudo vim /etc/profile
export ANACONDA_ROOT=~/anaconda2
export PYSPARK_DRIVER_PYTHON=$ANACONDA_ROOT/bin/ipython notebook
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
$ source /etc/profile
最后来运行WordCount例子,验证是否一切正常:
#import module
import re
from operator import add
#read input file
file_in = sc.textFile('/home/spark/WordCount.txt')
#count lines
print 'number of lines in file: %s' % file_in.count()
#add up lenths of each line
chars = file_in.map(lambda s: len(s)).reduce(add)
print 'number of cjaracters in file: %s' % chars
#get words from the input file
words = file_in.flatMap(lambda line: re.split('\W+',line.lower().strip()))
#words of more than 3 characters
words = words.filter(lambda x: len(x) > 3)
#set count 1 per word
words = words.map(lambda w: (w,1))
#reduce phase - sum count all the words
words = words.reduceByKey(add)
#create tuple (count,words) and sort in descending
words = words.map(lambda x: (x[1],x[0])).sortByKey(False)
words.take(10)
输出:
number of lines in file: 11
number of cjaracters in file: 3264
[(23, u'data'),
(12, u'spark'),
(10, u'hadoop'),
(8, u'processing'),
(7, u'mapreduce'),
(5, u'with'),
(5, u'solution'),
(4, u'step'),
(4, u'apache'),
(4, u'that')]
可视化:
#create function for histogram of most frequent words
% matplotlib inline
import matplotlib.pyplot as plt
#plt.figure(figsize=(8,6))
def histogram(words):
count = map(lambda x: x[1], words)
word = map(lambda x: x[0], words)
plt.barh(range(len(count)), count,color = 'grey')
plt.yticks(range(len(count)), word)
plt.show()
# display histogram
histogram(words.take(10))
可视化结果: