Spark-python-快速开始-阿里云开发者社区

开发者社区> 陈国林> 正文

Spark-python-快速开始

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

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的各个模块进入更深的研究


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10053 0
21、 Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存
转: 【http://bdy.lqkweb.com】 【http://www.swpan.cn】 注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your it.
1027 0
17、Python快速开发分布式搜索引擎Scrapy精讲—深度优先与广度优先原理
【http://www.lqkweb.com】 【http://www.swpan.cn】 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认是深度优先的 广度优先 是以层级来执行的,(列队方式实现) 【转载自:http://www.
658 0
[python]Numpy快速入门
NumPY是Python的一个矩阵处理库,提供了大量点矩阵处理函数,其内部通过C语言实现,执行速度快。 1.一维NumPY数组 使用NumPY提供的arange(n)函数可以创建一个包含n个元素的NumPY数组,取值分别为0~n-1.
573 0
18、 Python快速开发分布式搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式
【百度云搜索:http://www.bdyss.cn】 【搜网盘:http://www.swpan.cn】 我们自定义一个main.py来作为启动文件 main.py #!/usr/bin/env python # -*- coding:utf8 -*- from scrapy.
658 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13868 0
22、Python快速开发分布式搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
转自: http://www.bdyss.cn http://www.swpan.cn 第一步。首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/zheye 注意:此程序依赖以下模块包   Keras==2.
1124 0
+关注
陈国林
曾任职于阿里巴巴,现就职于美图,专业搬砖100年~
723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载