Pyspark 基础知识

这篇具有很好参考价值的文章主要介绍了Pyspark 基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. PySpark简介

PySpark 是Spark官方提供的一个Python类库,内置了完全的Spark API,可以通过PySpark类库来编写Spark应用程序,并将其提交到Spark集群中运行。在安装好的Spark集群中,bin/pyspark 是一个交互式的程序,可以提供交互式编程并执行Spark计算。

PySpark和Spark框架对比:
pyspark,spark,spark,大数据,分布式
Spark集群(Yarn)角色

pyspark,spark,spark,大数据,分布式

当Spark Application运行在集群上时,主要有四个部分组成

  1. Master(ResourceManager):集群大管家,整个集群的资源管理和分配
  2. Worker(NodeManager):单个机器的管家,负责在单个服务器上提供运行容器,管理当前机器的资源
  3. Driver:单个Spark任务的管理者,管理Executor的任务执行和任务分解分配,类似YARN的ApplicationMaster
  4. Executor:具体干活的进程, Spark的工作任务(Task)都由Executor来负责执行

2. PySpark应用程序

Spark Application程序入口为:SparkContext,任何一个应用首先需要构建SparkContext对象,如下两步构建:

  1. 创建SparkConf对象:设置Spark Application基本信息,比如应用的名称AppName和应用运行Master
  2. 基于SparkConf对象,创建SparkContext对象

2.1 PySpark实现WordCount

from pyspark import SparkContext,SparkConf
import os

# 配置环境变量
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"

if __name__ == '__main__':
    # 1) 创建SparkConf对象,设置应用的配置信息,比如应用名称和应用的运行模式
    conf = SparkConf().setAppName('WordCount').setMaster('local[*]')
    
    # 2) 构建SparkContext上下文实例对象,读取数据和调度Job执行
    sc = SparkContext(conf=conf)

    # 3) 读取数据,封装到RDD集合,认为列表list
    # 本地文件协议: file:///
    # HDFS协议:  hdfs://node1:8020/
    rdd_init = sc.textFile('file:///export/data/workspace/data/words.txt')

    # 4) 处理数据,调度RDD函数,对每行数据分割为单词
    rdd_flapMap = rdd_init.flatMap(lambda line: line.split(' '))

    # 5) 转换为二元祖,每个单词出现一次
    rdd_map = rdd_flapMap.map(lambda word: (word,1))

    # 6) 分组聚合统计操作,按照key分组聚合
    rdd_res = rdd_map.reduceByKey(lambda agg,curr : agg+curr)

    # 7) 输出打印结果
    print(rdd_res.collect())

	# 8) 输出结果到本地文件中
	rdd_res.saveAsTextFile("file:///export/data/workspace/data/rst.txt")

    # 9) 关闭 sc对象
    sc.stop()

WordCount执行流程
pyspark,spark,spark,大数据,分布式
WordCount执行流程分析:

Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver Program和Executors启动完成以后,就要开始执行应用程序中MAIN函数的代码。
pyspark,spark,spark,大数据,分布式

  1. 构建SparkContex对象和关闭SparkContext资源,都是在Driver Program中执行,上图中①和③都是:
    pyspark,spark,spark,大数据,分布式
  2. 上图中②的加载数据【A】、处理数据【B】和输出数据【C】代码,都在Executors上执行,从WEB UI监控页面可以看到此Job(RDD#action触发一个Job)对应DAG图,如下所示:
    pyspark,spark,spark,大数据,分布式
    从WordCount执行流程来看,非数据处理的部分有Driver工作,数据处理的部分由Executor工作。

3. PySpark 执行原理

PySpark宗旨是在不破坏Spark已有的运行时架构,在Spark架构外层包装一层Python API,借助Py4j实现Python和Java的交互,进而实现通过Python编写Spark应用程序,其运行时架构如下:
pyspark,spark,spark,大数据,分布式
详细原理如下图:
pyspark,spark,spark,大数据,分布式
Python On Spark Driver端由JVM执行,Executor端由JVM做命令转发,底层由Python解释器进行工作。其中白色部分是新增的Python进程

在Driver端:通过Py4j实现在Python中调用Java的方法,即将用户写的PySpark程序”映射”到JVM中,例如,用户在PySpark中实例化一个Python的SparkContext对象,最终会在JVM中实例化Scala的SparkContext对象

在Executor端:则不需要借助Py4j,因为Executor端运行的Task逻辑是由Driver发过来的,那是序列化后的字节码,虽然里面可能包含有用户定义的Python函数或Lambda表达式,Py4j并不能实现在Java里调用Python的方法,为了能在Executor端运行用户定义的Python函数或Lambda表达式,则需要为每个Task单独启一个Python进程,通过socket通信方式将Python函数或Lambda表达式发给Python进程执行

参考:
https://www.cnblogs.com/Ao0216/p/16376113.html
https://spark.apache.org/docs/latest/rdd-programming-guide.html文章来源地址https://www.toymoban.com/news/detail-575537.html

到了这里,关于Pyspark 基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解

    目录 前言 一、Pandas数据结构 1.Series 2.DataFrame  3.Time-Series  4.Panel 5.Panel4D 6.PanelND 二、Pyspark实例创建 1.引入库 2.转换实现 pyspark pandas series创建 pyspark pandas dataframe创建 from_pandas转换  Spark DataFrame转换  三、PySpark Pandas操作 1.读取行列索引 2.内容转换为数组 3.DataFrame统计描述 4.转

    2024年02月02日
    浏览(57)
  • pyspark基础学习——数据处理

    上一篇文章中讲了如何在windows下安装和检测: pyspark,同时简单介绍了运行的环境。本文想就我的一些学习经验,分享一下使用pyspark来处理csv文件上的一些常用的pyspark语法。 运行python代码,第一件事当然是导入对应的包,同时我们要为spark先创建好相应的环境,并且,spark中

    2023年04月08日
    浏览(45)
  • PySpark集群完全分布式搭建

    本文的目的是使读者对spark的安装流程有一个清晰的认识,并且能根据本文的内容搭建一个属于自己的完全分布式Spark集群,并在此基础上增加pyspark的分布式环境。 阅读本文前,有几个点需要注意: 本文假设读者有Hadoop的搭建基础,并且成功搭建了完全分布式的Hadoop集群,因

    2023年04月08日
    浏览(33)
  • Spark与PySpark(1.概述、框架、模块)

    目录 1.Spark 概念 2. Hadoop和Spark的对比 3. Spark特点 3.1 运行速度快 3.2 简单易用 3.3 通用性强 3.4 可以允许运行在很多地方 4. Spark框架模块 4.1 Spark Core 4.2 SparkSQL 4.3 SparkStreaming 4.4 MLlib 4.5 GraphX 5. Spark的运行模式 5.1 本地模式(单机) Local运行模式 5.2 Standalone模式(集群) 5.3 Hado

    2024年02月02日
    浏览(44)
  • spark、pyspark 常用的模版 demo 网址

    1、我自己有时候用百度或者其他的搜索出来的spark 常用案例,质量有的好有的差有时候就很烦。特地分享一个我常用的质量高的网站地址

    2024年02月11日
    浏览(241)
  • PySpark-Spark SQL基本介绍

    目录 Spark SQL基本介绍 Spark SQL特点 Spark SQL与Hive的异同 Spark SQL的数据结构 Spark SQL的入门 创建SparkSession对象 DataFrame详解 DataFrame基本介绍  DataFrame的构建方式 RDD构建DataFrame  内部初始化数据得到DataFrame schema总结 读取外部文件得到DataFrame Text方式读取 CSV方式读取 JSON方式读取 概

    2024年01月16日
    浏览(62)
  • 基于Headless构建高可用spark+pyspark集群

    Headless 服务类型并不分配容器云虚拟 IP,而是直接暴露所属 Pod 的 DNS 记录。没有默认负载均衡器,可直接访问 Pod IP 地址。因此,当我们需要与集群内真实的 Pod IP 地址进行直接交互时,Headless 服务就很有用。 其中Service的关键配置如下: clusterIP: None ,不让其获取clusterIP ,

    2024年02月06日
    浏览(44)
  • 10-用PySpark建立第一个Spark RDD

    PySpark实战笔记系列第一篇 Apache Spark的核心组件的基础是RDD。所谓的RDD,即 弹性分布式数据集(Resiliennt Distributed Datasets) ,基于RDD可以实现Apache Spark各个组件在多个计算机组成的集群中进行无缝集成,从而能够在一个应用程序中完成海量数据处理。 只读不能修改 :只能通过

    2024年04月08日
    浏览(48)
  • Spark在Windows下的环境搭建及pyspark的使用

        Spark是一个用于大数据处理的开源框架,它是用Scala编写的,而Scala是一种运行在Java虚拟机(JVM)上的编程语言,因此它依赖于Java的运行环境。所以首先需要安装JDK(JavaTM Platform Standard Edition Development Kit),并将环境变量配置好。 可参考我的另一篇博客: 1.下载Spark  

    2024年02月02日
    浏览(36)
  • spark之action算子学习笔记(scala,pyspark双语言)

    函数签名:def collect(): Array[T] 功能说明:收集每个分区数据,以数组Array的形式封装后发给driver。设置driver内存:bin/spark-submit --driver-memory 10G(内存大小) 注意:collect会把所有分区的数据全部拉取到driver端,如果数据量过大,可能内存溢出。 图1 结果 图2 结果 返回RDD中元素的

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包