Spark入门系列(二)| 1小时学会RDD编程
作者 | 梁云1991
转载自Python与算法之美(ID:Python_Ai_Road)
导读:本文为 Spark入门系列的第二篇文章,主要介绍 RDD 编程,实操性较强,感兴趣的同学可以动手实现一下。
RDD 是弹性分布式数据集(Resilient Distributed Dataset),是 Spark 对数据的核心抽象。RDD 其实是分布式的元素集合,当 Spark 对数据操作和转换时,会自动将RDD中的数据分发到集群,并将操作并行化执行。每个 RDD 都被分为多个分区,这些分区运行在集群中的不同节点。
一、编程环境
以下为Mac系统上单机版Spark练习编程环境的配置方法。
注意:仅配置练习环境无需安装Hadoop,无需安装Scala。
1,安装Java8
注意避免安装其它版本的jdk,否则会有不兼容问题。
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2,下载spark并解压
http://spark.apache.org/downloads.html
解压到以下路径:
Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.7
3,配置spark环境
vim ~/.bashrc
插入下面两条语句
export SPARK_HOME=/Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
4,配置jupyter支持
若未有安装jupyter可以下载Anaconda安装之。使用toree可以安装jupyter环境下的Apache Toree-Scala内核,以便在jupyter环境下运行Spark。
pip install toree
jupyter toree install --spark_home=Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.7
二、运行Spark
Spark可以通过以下一些方式运行。
1,通过spark-shell进入Spark交互式环境,使用Scala语言。
2,通过spark-submit提交Spark应用程序进行批处理。
这种方式可以提交Scala或Java语言编写的代码编译后生成的jar包,也可以直接提交Python脚本。
3,通过pyspark进入pyspark交互式环境,使用Python语言。
这种方式可以指定jupyter或者ipython为交互环境。
4,通过zepplin notebook交互式执行。
zepplin是jupyter notebook的apache对应产品。
5,安装Apache Toree-Scala内核。
可以在jupyter 中运行spark-shell。
使用spark-shell运行时,还可以添加两个常用的两个参数。
一个是master指定使用何种分布类型。
第二个是jars指定依赖的jar包。
#local本地模式运行,默认使用4个逻辑CPU内核
spark-shell #local本地模式运行,使用全部内核,添加 code.jar到classpath
spark-shell --master local[*] --jars code.jar #local本地模式运行,使用4个内核
spark-shell --master local[4] #standalone模式连接集群,指定url和端口号
spark-shell --master spark://master:7077 #客户端模式连接YARN集群,Driver运行在本地,方便查看日志,调试时推荐使用。
spark-shell --master yarn-client #集群模式连接YARN集群,Driver运行在集群,本地机器计算和通信压力小,批量任务时推荐使用。
spark-shell --master yarn-cluster
#提交scala写的任务
./bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 \ --queue thequeue \ examples/jars/spark-examples*.jar 10
#提交python写的任务
spark-submit --master yarn \
--executor-memory 6G \
--driver-memory 6G \
--deploy-mode cluster \
--num-executors 600 \
--conf spark.yarn.maxAppAttempts=1 \
--executor-cores 1 \
--conf spark.default.parallelism=2000 \
--conf spark.task.maxFailures=10 \
--conf spark.stage.maxConsecutiveAttempts=10 \
test.py
三、创建RDD
创建RDD的基本方式有两种,第一种是使用textFile加载本地或者集群文件系统中的数据。第二种是使用parallelize方法将Driver中的数据结构并行化成RDD。
1,textFile
2,parallelize(或makeRDD)
四、常用Action操作
Action操作将触发基于RDD依赖关系的计算。
1,collect
2,take
3,takeSample
4,first
5,count
6,reduce
7,foreach
8,coutByKey
9,saveAsFile
五、常用Transformation操作
Transformation转换操作具有懒惰执行的特性,它只指定新的RDD和其父RDD的依赖关系,只有当Action操作触发到该依赖的时候,它才被计算。
1,map
2,filter
3,flatMap
4,sample
5,distinct
6,subtract
7,union
8,intersection
9,cartesian
10,sortBy
11,pipe
六、常用PairRDD转换操作
PairRDD指的是数据为Tuple2数据类型的RDD,其每个数据的第一个元素被当做key,第二个元素被当做value。
1,reduceByKey
2,groupByKey
3,sortByKey
4,join
5,leftOuterJoin
6,rightOuterJoin
7,cogroup
8,subtractByKey
9,foldByKey
七、持久化操作
如果一个RDD被多个任务用作中间量,那么对其进行cache,缓存到内存中会对加快计算非常有帮助。
声明对一个RDD进行cache后,该RDD不会被立即缓存,而是等到它第一次因为某个Action操作触发后被计算出来时才进行缓存。
可以使用persist明确指定存储级别,常用的存储级别是MEMORY_ONLY和MEMORY_AND_DISK。
1,cache
2,persist
八、共享变量
当Spark集群在许多节点上运行一个函数时,默认情况下会把这个函数涉及到的对象在每个节点生成一个副本。但是,有时候需要在不同节点或者节点和Driver之间共享变量。
Spark提供两种类型的共享变量,广播变量和累加器。
广播变量是不可变变量,实现在不同节点不同任务之间共享数据。广播变量在每个节点上缓存一个只读的变量,而不是为每个task生成一个副本,可以减少数据的传输。
累加器主要用于不同节点和Driver之间共享变量,只能实现计数或者累加功能。累加器的值只有在Driver上是可读的,在节点上只能执行add操作。
1,broadcast
2,Accumulator
九、分区操作
分区操作包括改变分区方式,以及和分区相关的一些转换操作。
1,coalesce
2,repartition
3,partitionBy
4,mapPartitions
5,mapPartitionsWithIndex
6,foreachPartitions
7,aggregate
8,aggregateByKey
◆
精彩推荐
◆
“只讲技术,拒绝空谈!”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。
目前,大会早鸟票限量发售中~扫码购票,领先一步!
推荐阅读
AI“配”5G,能“生”出怎样的未来?
什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉!
2019年最新华为、BAT、美团、头条、滴滴面试题目及答案汇总
10分钟学会用Pandas做多层级索引
中国第一程序员,微软得不到他就要毁了他!
透析《长安十二时辰》里的望楼,人类在唐朝就有 5G 愿望了?
首批 8 款 5G 手机获 3C 认证;iPhone6 系列停产;Android Q Beta 5 发布 | 极客头条
"别太乐观, 冲破黑暗还很远呀! "

相关文章:

Office2010启动慢的解决方法
以word2010为例: 解决启动慢的问题: 转自:http://www.blue1000.com/bkhtml/2011-12/70698.htm 首先启动Word2010,-->单击进入“文件”选项卡-->选择左边的“选项”按钮-->弹出“word选项”对话框窗口,-->…

如何在 Vue 项目中使用 echarts
数据的重要性我们大家都知道,就算再小的项目中都可能使用几个图表展示,我最近在做项目的过程中也是需要用到图表,最后选择了echarts 图表库,为什么选择 echarts,第一:简单上手容易,第二…

OpenCV实现在图像中写入汉字
由于OpenCV自带的cvInitFont和cvPutText函数不支持向图像中写入中文,参考http://www.opencv.org.cn/forum/viewtopic.php?t2083 中的方法,在windows7 64位机上用vs2008OpenCV2.3.1实现具体步骤如下: 1、新建一个控制台工程Test,先…

Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM
你可以使用Operations Mangager连接到VMM上去监控VMM管理的虚拟机和虚拟机的主机的健康和可用性.你还可以监视VMM管理服务器的健康和可用性,VMM数据库服务器、存储库服务器,和矢量调制法的自服务门户web服务器.当你把VMM与Operations Mangager集成、VMM的…
ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系
前面已经介绍了如何使用URDF建造机器人小车并显示在Rviz的仿真环境里面,但是小车是静止的。下面介绍如何让它在Rviz里面动起来,并理清URDF,TF 和 odom 的关系。 1. ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系 一般在urdf文件…

谷歌新研究:基于数据共享的神经网络快速训练方法
作者 | Google Brain译者 | 凯隐责编 | 夕颜出品 | AI科技大本营(ID:rgznai100)导读:神经网络技术的普及离不开硬件技术的发展,GPU 和 TPU 等硬件型训练加速器带来的高算力极大的缩短了训练模型需要的时间,使得研究者们…

制作一个简单的linux
我这里是借助宿主机做的一个简单的Linux,我们只要知道一个Linux启动过程需要什么,这里制作就简单的多了。不过没有基础的也没关系,我写的很详细,没有基础的看了我写的步骤只要细心也是会做出来的,我这里的小Linux是很简…

nginx是什么,如何使用
一:nginx是什么? 二:nginx作为网关,需要具备什么?(nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能:) 反向代理…

OpenCV中Mat数据结构使用举例
#include "stdafx.h"#include <string>#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){//创建一个用13j填充的 7 x 7 复矩阵-----1Mat M(7, 7, CV_32FC2, Scalar…

贾扬清加盟AI开发者大会!早鸟票抢购正式开启
整理 | 夕颜硬核 AI 技术大会,一年参加一次就够了。9 月 6日-7 日,2019 AI 开发者大会(AI ProCon)将在北京富力万丽酒店举行,人工领域技术领袖将再次齐聚一堂,探讨过去一年最新的 AI 技术趋势与变化&#x…

基本控件HyperlinkButton控件
HyperlinkButton控件可用来作为超链接按钮,支持页面导航。 若导航到MainPage.xaml,NavigateUri属性指定单击后导航页面的Uri 若导航到网页,必须同时指定TargetName,否则要报错。 <HyperlinkButton Width"200" Heigh…

江湖又现中科大少年班的传说
作者 | ——,夕颜出品 | AI科技大本营(ID:rgznai100)导读:近日,《日本经济新闻》的一则报道指出:在左右着企业、国家和地区发展的人工智能领域,中科大少年班的人才支撑着中国的发展。中国自动驾…

[JOISC2014]バス通学
[JOISC2014]バス通学 题目大意: 有\(n(n\le10^5)\)个点和\(m(m\le3\times10^5)\)条交通线路。第\(i\)条交通线路可以让你在时间\(x_i\)从\(a_i\)出发,并在\(y_i\)时到达\(b_i\)。\(q(q\le10^5)\)次询问,每次询问若要在时间\(l_i\)到达\(n\)点…

Windows7在Notepad++中配置Python+OpenCV
1、 从http://notepad-plus-plus.org/下载最新的Notepad6.2.1安装; 2、 从http://www.python.org/下载python-2.7.3.msi安装到D:\Python27目录下,并将D:\Python27添加到环境变量Path中; 3、 打开Notepad,按下F5或者运行(R…

virtualenv 在windows下的绿化方法
virtualenv 在windows下的绿化方法测试环境:windows 7 32 en Python 2.7.3setuptools-0.6c11.win32-py2.7virtualenv-1.9.1-with-pip-1.3.11. f:\> virtualenv my2. 编辑 my/Scripts/activate.bat 前几行中设置VIRTUAL_ENV的那条语句,改为set VIRTUA…

当谈论迭代器时,我谈些什么?
作者 | 樱雨楼编辑 | 豌豆花下猫转载自python猫(ID:python_cat)导语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感…

Windows7在Eclipse中配置Python+OpenCV
1. 从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe,安装到D:\ProgramFiles\Java,并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中; 2. 从…

Pinterest基于AWS规模化使用Apache Kafka的实践经验
在Pinterest,Apache Kafka被用于为实时流应用程序传输数据、记录日志和可视化监控指标。Pinterest的Kafka托管在AWS上,为了实现复制和高可用性,其安装使用了MirrorMaker和DoctorKafka工具。 Pinterest的技术主管Yu Yang写道,Pinte…

Open×××以及其它IP层×××的完全链路层处理的实现
如果Open也能实现传输模式该有多好,如果基于Open实现的产品能仅仅作为一根昂贵的网线串接在用户网络环境,自动捕获感兴趣流量该有多好;如果它能做到只需要配置一个IP即可工作而无需配置任何路由该有多好。我们知道Open是一个用户态的程序&…

Windows 7 64位机上OpenCV2.4.3的编译、安装与配置
1. 从http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/下载OpenCV2.4.3; 2. 将OpenCV-2.4.3.exe放到D:\soft\OpenCV2.4.3文件夹下,解压到当前文件夹下,生成一个opencv文件夹; 3. 下载并安…

有望替代卷积神经网络?微软最新研究提基于关系网络的视觉建模
导语:最近两年,自注意力机制、图和关系网络等模型在NLP领域刮起了一阵旋风,基于这些模型的Transformer、BERT、MASS等框架已逐渐成为NLP的主流方法。这些模型在计算机视觉领域是否能同样有用呢?近日,微软亚洲研究院视觉…

Word 2013无法发布文章到博客园
2018年12月12日突然发现word2013无法发布文章到博客园了, 虽然不常发布博客, 但作为一个强迫症患者, 不折腾好了, 吃肉都不香呀! 删除之前的账户, 想重新注册, 居然遇到了灰色对话框!…

1 sec on Large Judge (java): https://github.com/l...
1 sec on Large Judge (java): https://github.com/leoyonn/leetcode/blob/master/src/q029_substring_of_all_words/Solution.java转载于:https://www.cnblogs.com/codingtmd/archive/2013/03/31/5079017.html

性能提升3倍的树莓派4,被爆设计缺陷!
整理 | 屠敏转载自CSDN(ID:CSDNnews)一直以来,素有世界最小电脑之称的 Raspberry Pi(树莓派)是一种独特的存在。它不仅只有一块信用卡般的体积,还具备主机电脑所具备的功能,如运行 L…

Windows7 64位机上Emgu CV2.4.2安装与配置
1. 从http://sourceforge.net/projects/emgucv/?sourcedirectory下载最新的Emgu CV2.4.2; 2. 将libemgucv-windows-x86-gpu-2.4.2.1777拷贝到D:\soft\Emgu2.4.2文件夹下,运行此.exe文件,将其安装到D:\soft\Emgu2.4.2\emgucv-wind…

2018年12月,华为HCNP大面积更新题目,军哥独家解题咯
2018年12月,华为HCNP大面积更新题目,乾颐堂军哥独家解题咯2018年是华为认证变动比较大的一年,华为认证走过这几年不得不说是有一定进步的,而且最近华为孟女侠确实让我也小小的骄傲了一把,所以当然希望华为认证能做的更…

关于ProGuard的学习了解(从别处转来)
from:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72639.html在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了。所以,在JNI应用中该慎用progurad啊。解决办…

tesseract-ocr3.02字符识别过程操作步骤
1、 从http://code.google.com/p/tesseract-ocr/downloads/list下载tesseract-ocr-3.02-vs2008、tesseract-ocr-3.02.chi_sim.tar、tesseract-ocr-3.02.02.tar、tesseract-ocr-3.02.02-doc-html.tar、leptonica-1.68-win32-lib-include-dirs相关文件; 2、 将所有…

中文repo“霸榜”GitHub Trending,国外开发者不开心了
编译整理 | 一一出品 | AI科技大本营(ID:rgznai100)近日,一位叫Balazs Saros 的国外开发者在Medium上发表了一篇名为"Chinese repos are ruining the Github trending page"的博文,翻译一下他的意思就是“中文 repo 正在…

使用 electron-updater 自动更新应用
前端工程师可以使用 Electron 非常方便的编写出 PC 端应用,而应用更新的方式也有很多,详细可见更新应用程序。 我的项目是基于 electron-vue 搭建的,构建打包生成安装包,则用的是 electron-builder,所以更新自然选择 e…