作者 | 梁云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 发布 | 极客头条

  • "别太乐观, 冲破黑暗还很远呀! "

你点的每个“在看”,我都认真当成了喜欢

Spark入门系列(二)| 1小时学会RDD编程相关推荐

  1. C语言速看,C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  2. Kafka与Spark集成系列二Spark的安装及简单应用

    原 [Kafka与Spark集成系列二] Spark的安装及简单应用https://blog.csdn.net/u013256816/article/details/82082019版权声明:本文为博 ...

  3. 小猪的C语言快速入门系列(二)

    小猪的C语言快速入门系列(二) 标签: C语言 本节引言 在上一节中,对于C语言有了一个初步的了解,学会了如何使用IDE来进行 代码编写,编译和运行.而这一节,我们会对C语言的基本语法进行学习, C语 ...

  4. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

  5. Quantopian 入门系列二 - 流水线 (下)

    本文含 8225 字,28 图表截屏 建议阅读 42 分钟 本贴接着上贴[Quantopian 入门系列二 - 流水线 (上)]的内容,讨论下面目录的 5- 8 节: 简介 因子 筛选器 分类器 掩码 ...

  6. Reflex WMS入门系列二十五:将叉车纳入系统进行管理

    Reflex WMS入门系列二十五:将叉车纳入系统进行管理 据笔者所知,SAP WM 模块里是不对仓库里常用的叉车等仓库管理工具进行管理的.笔者发现,Reflex WMS系统则会在很多仓库部门日常操作 ...

  7. Reflex WMS入门系列二十二:物料库存报表

    Reflex WMS入门系列二十二:物料库存报表 在Reflex WMS系统上,我们可以通过物料号查询它的HD列表,或者IPG列表.通过在其HD/IPG信息得知其库存数据.当然还可以通过如下方式直接获 ...

  8. Reflex WMS入门系列二十三:几个库存相关的报表

    Reflex WMS入门系列二十三:几个库存相关的报表 Reflex WMS系统作为一个主流的仓库管理软件系统,自然需要对仓库里的库存有多个角度的报表功能.比如常见的slow-moving, agin ...

  9. Reflex WMS入门系列二十六:合并托盘

    Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...

最新文章

  1. R创建两个变量的直方图
  2. CF 529B Group Photo 2 (online mirror version)
  3. 【转】CLASS ALV(CL_GUI_ALV_GRID) 添加保存布局(Save Layout)的按钮
  4. 吃货开发 阶段01 类的定义 方法的布局 0925
  5. 33、JSONP跨域
  6. OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的早教管理系统
  8. ES10新特性_字符串扩展方法_trimStart--trimEnd---JavaScript_ECMAScript_ES6-ES11新特性工作笔记058
  9. C# IMEI15位转换成8位密码
  10. 【BP回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
  11. 为什么我每天都会使用坚果云
  12. Work Stealing 的运作原理
  13. 文本对比,文本差异并排对比显示实现
  14. Vue3 组件示例工程(二) —— AQI组件
  15. 【优化求解】基于蝗虫算法(MOGOA)求解多目标问题matlab源码
  16. 超好看的css动画特效实现
  17. anaconda无法启动,一直停在loading applications卡住的解决方案
  18. input光标的移动和选中
  19. html怎样图片不会失真,如何解决图片放大画质失真问题
  20. 超微主板升级bios_AMD又给CPU打鸡血了!但刷BIOS前你要懂这些

热门文章

  1. 虚拟机下运行linux通过nat模式与主机通信、与外网连接
  2. windows 切换 默认 jdk 版本
  3. EBS form日历可选范围设置(calendar.setup )介绍
  4. tomcat配置tomcat-redis-session-manager
  5. DreamWeaver做ASP 第13页
  6. C语言新手写扫雷攻略3
  7. Python教学课程分享10-异常处理结构
  8. Docker-Compose搭建单体SkyWalking 6.2
  9. JMeter的安装和使用
  10. 2017 Multi-University Training Contest 3 hdu 6063