广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spark 编程指南 (一) [Spa
  • 240
分享到

Spark 编程指南 (一) [Spa

指南SparkSpa 2023-01-31 08:01:47 240人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python Programming Guide - spark(Python) Spark应用基本概念 每一个运行在cluster上的spark应用程序,是由一个运行main函数的driver program和运行多种并行操作的exec

python Programming Guide - sparkPython

Spark应用基本概念

每一个运行在cluster上的spark应用程序,是由一个运行main函数的driver program和运行多种并行操作的executes组成

其中spark的核心是弹性分布式数据集(Resilient Distributed Dataset—RDD)

  • Resilient(弹性):易变化、易计算

  • Distributed(分布式):可横跨多台机器,集群分布

  • Dataset(数据集):大批量数据的集合

<!-- more -->

RDD基本概念

RDD是逻辑集中的实体,代表一个分区的只读数据集,不可发生改变

【RDD的重要内部属性】

  • 分区列表(partitions)
    对于一个RDD而言,分区的多少涉及对这个RDD并行计算的粒度,每一个RDD分区的计算都会在一个单独的任务中执行,每一个分区对应一个Task,分区后的数据存放在内存当中

  • 计算每个分区的函数(compute)
    对于Spark中每个RDD都是以分区进行计算的,并且每个分区的compute函数是在对迭代器进行复合操作,不需要每次计算,直到提交动作触发才会将之前所有的迭代操作进行计算,lineage在容错中有重要作用

  • 对父级RDD的依赖(dependencies)
    由于RDD存在转换关系,所以新生成的RDD对上一个RDD有依赖关系,RDD之间通过lineage产生依赖关系

【窄依赖】
每一个父RDD的分区最多只被子RDD的一个分区所使用,可以类似于流水线一样,计算所有父RDD的分区;在节点计算失败的恢复上也更有效,可以直接计算其父RDD的分区,还可以进行并行计算

子RDD的每个分区依赖于常数个父分区(即与数据规模无关)
输入输出一对一的算子,且结果RDD的分区结构不变,主要是map、flatmap
输入输出一对一,但结果RDD的分区结构发生了变化,如uNIOn、coalesce
从输入中选择部分元素的算子,如filter、distinct、subtract、sample

【宽依赖】
多个子RDD的分区会依赖于同一个父RDD的分区,需要取得其父RDD的所有分区数据进行计算,而一个节点的计算失败,将会导致其父RDD上多个分区重新计算

子RDD的每个分区依赖于所有父RDD分区
对单个RDD基于key进行重组和reduce,如groupByKey、reduceByKey
对两个RDD基于key进行jion和重组,如jion

  • 对key-value数据类型RDD的分区器,控制分区策略和分区数(partitioner)
    partitioner就是RDD的分区函数,即HashPartitioner(哈希分区)和RangePartitioner(区域分区),分区函数决定了每个RDD的分区策略和分区数,并且这个函数只在(k-v)类型的RDD中存在,在非(k-v)结构的RDD中是None

  • 每个数据分区的地址列表(preferredLocations)
    与Spark中的调度相关,返回的是此RDD的每个partition所出储存的位置,按照“移动数据不如移动计算”的理念,在spark进行任务调度的时候,尽可能将任务分配到数据块所存储的位置

  • 控制操作(control operation)
    spark中对RDD的持久化操作是很重要的,可以将RDD存放在不同的存储介质中,方便后续的操作可以重复使用。

主要有cache、persist、checkpoint,checkpoint接口是将RDD持久化到hdfs中,与persist的区别是checkpoint会切断此RDD之前的依赖关系,而persist会保留依赖关系。checkpoint的两大作用:一是spark程序长期驻留,过长的依赖会占用很多的系统资源,定期checkpoint可以有效的节省资源;二是维护过长的依赖关系可能会出现问题,一旦spark程序运行失败,RDD的容错成本会很高

Python连接Spark

Spark 1.6.0 支持 Python 2.6+ 或者 Python 3.4+,它使用标准的CPython解释器, 所以像NumPy这样的C语言类库也可以使用,同样也支持PyPy 2.3+

可以用spark目录里的bin/spark-submit脚本在python中运行spark应用程序,这个脚本可以加载Java/Scala类库,让你提交应用程序到集群当中。你也可以使用bin/pyspark脚本去启动python交互界面

如果你希望访问HDFS上的数据集,你需要建立对应HDFS版本的PySpark连接。

最后,你的程序需要import一些spark类库:

from pyspark import SparkContext, SparkConf

PySpark 要求driver和workers需要相同的python版本,它通常引用环境变量PATH默认的python版本;你也可以自己指定PYSPARK_PYTHON所用的python版本,例如:

PYSPARK_PYTHON=python3.4 bin/pyspark
PYSPARK_PYTHON=/opt/pypy-2.5/bin/pypy bin/spark-submit examples/src/main/python/pi.py

初始化Spark

一个Spark应用程序的第一件事就是去创建SparkContext对象,它的作用是告诉Spark如何建立一个集群。创建SparkContext之前,先要创建SparkConf对象,SparkConf包含了应用程序的相关信息。

conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)
  • appName:应用的名称,用户显示在集群UI上

  • master:Spark、Mesos或者YARN集群的URL,如果是本地运行,则应该是特殊的'local'字符串

在实际运行时,你不会讲master参数写死在程序代码里,而是通过spark-submit来获取这个参数;在本地测试和单元测试中,你仍然需要'local'去运行Spark应用程序

使用shell

在PySpark Shell中,一个特殊SparkContext已经帮你创建好了,变量名是:sc,然而在Shell中创建你自己的SparkContext是不起作用的。

你可以通过--master参数设置master所连接的上下文主机;你也可以通过--py-files参数传递一个用逗号作为分割的列表,将Python中的.zip、.egg、.py等文件添加到运行路径当中;你同样可以通过--packages参数,传递一个用逗号分割的Maven列表,来个这个Shell会话添加依赖(例如Spark的包)

任何额外的包含依赖的仓库(如SonaType),都可以通过--repositories参数添加进来。
Spark中所有的Python依赖(requirements.txt的依赖包列表),在必要时都必须通过pip手动安装

例如用4个核来运行bin/pyspark:

./bin/pyspark --master local[4]

或者,将code.py添加到搜索路径中(为了后面可以import):

./bin/pyspark --master local[4] --py-files code.py

通过运行pyspark --help来查看完整的操作帮助信息,在这种情况下,pyspark会调用一个通用的spark-submit脚本

在IPython这样增强Python解释器中,也可以运行PySpark Shell;支持IPython 1.0.0+;在利用IPython运行bin/pyspark时,必须将PYSPARK_DRIVER_PYTHON变量设置成ipython:

PYSPARK_DRIVER_PYTHON=ipython ./bin/pyspark

你可以通过PYSPARK_DRIVER_PYTHON_OPTS参数来自己定制ipython命令,比如在IPython Notebook中开启PyLab图形支持:

PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" ./bin/pyspark

参考:Spark Programming Guide 官方文档

原博链接,请注明出处。

--结束END--

本文标题: Spark 编程指南 (一) [Spa

本文链接: https://www.lsjlt.com/news/192942.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spark 编程指南 (一) [Spa
    Python Programming Guide - Spark(Python) Spark应用基本概念 每一个运行在cluster上的spark应用程序,是由一个运行main函数的driver program和运行多种并行操作的exec...
    99+
    2023-01-31
    指南 Spark Spa
  • Spark Streaming 编程入门指南
    Spark Streaming 是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理。可以从许多数据源(例如Kafka,Flume,Kinesis或TCP sockets)中提取数据,并且可以使用复杂的算...
    99+
    2022-02-15
    Spark Streaming 编程入门指南
  • Shell编程指南
    基础知识 shell执行方式 sh xx.sh (文件须有r权限) || ./xx.sh (文件须有x权限) 注:sh xx.sh方式比较安全 文件名后缀 .sh shell内容开头 #!/bin/...
    99+
    2022-06-04
    指南 Shell
  • PHP入门指南:UDP编程
    PHP是一门十分流行的Web编程语言,早期更被大家认为是一种简单易学的脚本语言。然而,由于其流行度,在过去几年中,它已经成长为一门成熟的编程语言,可以实现各种任务和项目。而在这门语言中,UDP编程是一个十分重要和有趣的主题。UDP(User...
    99+
    2023-05-20
    编程 PHP UDP
  • PHP入门指南:HTTP编程
    PHP入门指南:HTTP编程随着互联网的飞速发展,网站已经成为人们交流、获取信息和进行业务交易的重要途径。在网站开发的过程中,PHP作为一种广泛使用的Web编程语言,得到了大量的应用。HTTP(Hypertext Transfer Prot...
    99+
    2023-05-22
    编程 PHP Http
  • PHP入门指南:多线程编程
    PHP是一种流行的服务器端编程语言,用于创建Web应用程序和动态网站。虽然PHP本身不支持多线程编程,但它提供了一些工具和扩展,可用于实现非阻塞I/O操作和进程间通信。本文将介绍PHP多线程编程的基本知识和工具。多线程编程基础多线程编程是一...
    99+
    2023-05-20
    PHP(编程语言) 多线程编程(并发编程方式) 入门指南(针对初学者的指导文本)
  • PHP入门指南:TCP/IP编程
    PHP作为一个流行的服务器端脚本语言,它不仅可以用于Web应用程序的开发,还可以用于进行TCP/IP编程以及网络编程。在本文中,我们将为您介绍TCP/IP编程的基础知识和如何使用PHP进行TCP/IP编程。一、TCP/IP编程的基础知识TC...
    99+
    2023-05-20
    PHP入门 TCP/IP编程 编程指南
  • PHP入门指南:异步编程
    PHP作为一门流行的脚本语言,一直以来都是Web开发的主流语言之一。在Web开发中,异步编程被越来越多地应用于网络爬虫、实时聊天、长轮询等高性能场景。本文将介绍PHP异步编程的相关知识,以便读者掌握异步编程基础,提高Web应用性能。一、异步...
    99+
    2023-05-20
    PHP 异步编程 入门指南
  • Flink入门(五)——DataSet Api编程指南
    Apache Flink Apache Flink 是一个兼顾高吞吐、低延迟、高性能的分布式处理框架。在实时计算崛起的今天,Flink正在飞速发展。由于性能的优势和兼顾批处理,流处理的特性,Flink可能正在颠覆整个大数据的生态...
    99+
    2020-07-01
    Flink入门(五)——DataSet Api编程指南
  • PHP入门指南:ReactPHP编程框架
    随着互联网技术的日益发展,Web应用程序已经渐渐成为了我们日常生活和工作中离不开的一部分。而PHP作为一个广泛应用于Web开发的语言,也在不断地发展和改进。本文将为你介绍一种基于PHP的编程框架——ReactPHP,帮助你更好地理解和掌握它...
    99+
    2023-05-20
    PHP 入门指南 ReactPHP编程框架
  • PHP入门指南:Swoole编程框架
    随着互联网技术的不断发展,越来越多的开发者开始涉足PHP编程,而Swoole作为一种高性能的开源框架,它的出现为PHP开发者提供了更多的工具和方法,让PHP编程变得更加快捷、高效。本篇文章将介绍Swoole框架的基本概念和入门使用方法,帮助...
    99+
    2023-05-21
    PHP 入门指南 Swoole编程框架
  • Android Flutter异步编程指南分享
    目录1 Dart 中的事件循环模型1.1 向 microtask 队列中添加任务1.2 向 event 队列中添加任务2 Dart 中的异步实现2.1 Future()2.2 Fut...
    99+
    2023-05-14
    Android Flutter异步编程 Flutter异步编程 Flutter异步
  • Python编程入门指南之函数
    目录Python编程:函数定义和调用函数向函数传递信息传递实参:位置实参传递实参:关键字实参传递实参:默认值传递列表禁止函数修改列表传递任意数量实参返回值返回简单值让实参可选返回字典...
    99+
    2022-11-12
  • 掌握 Go 语言:Linux 编程指南
    Go 语言是一种由 Google 开发的开源编程语言,它具有高效、简单、易于学习等特点,因此在近年来逐渐受到了广泛的关注和应用。本文将介绍如何在 Linux 环境下使用 Go 语言进行编程。 一、安装和配置 Go 语言环境 首先,我们需要...
    99+
    2023-07-10
    教程 linux 关键字
  • 如何用Java编写Bash文件:一个实用的编程算法指南?
    Java是一门广泛使用的编程语言,拥有强大的面向对象编程能力和多种开发工具。而Bash则是Linux和Unix系统中广泛使用的脚本语言,用于自动化操作和批处理任务。本文将介绍如何使用Java编写Bash文件,为您提供一个实用的编程算法指南。...
    99+
    2023-06-25
    bash 文件 编程算法
  • 用 Go 编写 JavaScript 函数:一份完整指南
    Go 语言是一门高效、强类型、编译型的语言,而 JavaScript 是一门解释型的动态语言。两种语言各有所长,但在实际开发中,我们可能需要在两种语言之间进行切换。因此,本文将介绍如何用 Go 编写 JavaScript 函数,提供一份完整...
    99+
    2023-08-22
    npm 函数 javascript
  • 从Linux文件系统到Java编程算法:一份全面的指南?
    Linux文件系统和Java编程算法是两个看似不相关的领域,但是它们在计算机科学中都扮演着重要的角色。本文将会带领你了解Linux文件系统和Java编程算法的基础知识,并且提供一些实用的演示代码。 一、Linux文件系统 Linux文件系统...
    99+
    2023-08-09
    文件 linux 编程算法
  • 使用 JavaScript 和 Go 语言实现实时编程:一份详细指南
    JavaScript 和 Go 语言是两种非常流行的编程语言,它们都有着自己的优缺点。JavaScript 是一种灵活的脚本语言,广泛应用于 Web 开发和前端开发领域;而 Go 语言则是一种强类型、高效的编程语言,适用于后端开发和系统编...
    99+
    2023-09-08
    实时 教程 javascript
  • 阿里云服务器编程入门指南
    阿里云服务器是阿里云提供的一种云服务,可以让你轻松地在云上构建、运行和扩展应用程序。本文将为你提供阿里云服务器编程的入门指南,包括如何创建服务器、如何连接到服务器、如何在服务器上安装和运行应用程序等内容。 阿里云服务器编程入门指南:创建阿里...
    99+
    2023-11-02
    阿里 入门 服务器
  • Django文件中的Python编程算法指南
    Django是一种基于Python编程语言的高级Web框架,它具有简单易用、可扩展性强、安全性高等特点,因此广受开发者欢迎。在Django文件中,包含了许多Python编程算法,本篇文章将为您介绍其中的一些。 数据库操作 在Django...
    99+
    2023-06-20
    文件 django 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作