Spark-python-快速开始

1. 概览

这篇文章主要是关于Spark的快速熟悉和使用,我们使用Python和Spark的shell接口来操作Spark。 Spark shell使得我们可以很简单的学习Spark的Api,同时也是一个强大数据分析交互的工具。

2. Spark shell

我们使用Python版本的Spark工具pyspark,前提是Spark的安装路径已经加到环境变量PATH中,否则会报找不到命令 特别说明: >>>表示的所pyspark的命令

./bin/pyspark

Spark核心的抽象是弹性分布式数据集合,我们称为RDD(Resilient Distributed Dataset)。一个RDD可以从输入文件中产生比如HDFS文件,也可以从其他RDD转换而来。

我们通过读取本地文件text.dat来创建一个新的RDD

hadoop@ubuntu:~/github$ cat text.dat
spark
i
love
you
>>> textFile = sc.textFile("text.dat")

RDD包括两种运算操作,action和transformation。action操作会返回值,例如count(),transformation操作则是返回一个新的RDD,例如filter()。

2). RDD action操作

>>> textFile.count()
4
>>> textFile.first()
u'spark'

3). RDD transformation操作

>>> newTextFile = textFile.filter(lambda line: "spark" in line)
>>> newTextFile.count()
1

4). RDD的操作支持链接在一起操作

>>> textFile.filter(lambda line: "spark" in line).count()
1

3. RDD更多操作

1). RDD的action和transformation可以用在更复杂的计算上面

>>> textFile.map(lambda line: len(line)%2).reduce(lambda a,b: a if (a > b) else b)
1

说明: map产生一个新的RDD,RDD每个值是一个整数,等于每一行长度的1/2.reduce产生另一个新的RDD,对于key相同的数据取整数值最大的那个.(默认情况下key都相同)

在这里我们采用的是python的lambda来代替函数, 所以上面的代码等价于下面的代码

>>> def max(a, b):
...     if a > b:
...             return a
...     else:
...             return b
... 
>>> textFile.map(lambda line: len(line)%2).reduce(max)
1

对于Hadoop的MapReduce来说,Spark可以很容易就实现,比如常见的word count

>>> wordCount = textFile.flatMap(lambda line: line.split('u')).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
>>> wordCount.collect()
[(u'i', 1), (u'', 1), (u'spark', 1), (u'love', 1), (u'yo', 1)]

在这里我用到了flatMap 这个api, 把一行映射为多行并产生一个新的RDD.再用map把映射为pair(word, 1), 最后用reduce把相同word的count相加. 我们可以用collect action以list方式输出RDD数据

4. 数据缓存

Spark支持把数据缓存到内存中, 很多时候当某些数据被频繁利用的时候缓存数据到内存是非常有用的. 比如当我们在计算网页PageRank的时候可以把经常用的query集合缓存到内存中

>>> wordCount.cache()
PythonRDD[30] at collect at <stdin>:1
>>> wordCount.count()
5
>>> wordCount.count()
5

5. Spark应用程序

同理我们也可以使用Spark API编写Spark应用程序

现在我们用Python API编写一个Spark的应用程序, 命名为simple_app.py

"""
Simple spark app
"""

from pyspark import SparkContext
sc = SparkContext("local", "SimpleApp")

#Spark default read from HDFS
#must be sure has exist HDFS file /user/hadoop/test_data/README.md
data_rdd = sc.textFile('/user/hadoop/test_data/README.md').cache()
num_a = data_rdd.filter(lambda line: 'a' in line).count()
num_b = data_rdd.filter(lambda line: 'b' in line).count()
print num_a
print num_b

我们用spark-submit来提交这个应用程序

spark-submit --master local simple_app.py

快速的完成了Spark的第一个应用程序,后面我们会对Spark的各个模块进入更深的研究


优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/252115

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。