Spark介绍及RDD操作

Spark介绍及RDD操作

    • PySpark简介
      • spark特点
      • 运行原理
      • spark实例化
    • SparkCore-RDD
      • RDD创建
      • 转换(Transformation)
      • 行动(Action)

PySpark简介

spark特点

  • 运行速度快:DAG+内存运算
  • 容易使用:Java、Scala、Python、R
  • 通用性强:完整而强大的技术栈(Graphx:图计算,SparkSQL:结构化数据处理,MLib/ML:机器学习,Streaming:流式计算框架(微批处理)这方面Flink做的比较好)
  • 运行模式多样:Kubernetes、Standalone、YARN、Mesos
  • 兼容多种数据源:
    备注:使用python调Spark性能稍微不如Java、Scala

运行原理

spark封装了python接口,使用python调用spark工作原理如下
在这里插入图片描述

spark实例化

#初始化spark上下文
spark = (SparkSession.builder
#        .master("spark://192.168.2.123:7077") # 程序运行环境.master("local[4]")                   # 如果有集群,这里填写集群资源信息。例如:spark://IP:port.appName("SparkCoreDemo")             # 运行程序任务名
#        .config("youkey","youvalue") \        # 配置信息
#        .config('spark.dynamicAllocation.enabled',True)\ 开启动态分配资源
#        .config('spark.dynamicAllocation.initialExecutors',1)\ 动态分配初始executor个数默认值
#        .config('spark.dynamicAllocation.minExecutors',1)\ 最少分配1个
#        .config('spark.dynamicAllocation.maxExecutors',12)\ 最多分配12个
#        .config('spark.executor.memory','12G') \ # 设置每个执行器 内存大小
#        .config('spark.executor.cores','4') \ # 设置每个执行器 CPU核数 .getOrCreate())
sc = spark.sparkContext    # 用于RDD操作
sc.setLogLevel('ERROR') # 设置日志输出等级
spark.version  # 查看spark版本
# spark.stop() # 释放资源

SparkCore-RDD

RDD(Resilient Distributed DataSes)指一个只读的,可分区的分布式数据集。这个数据集放在内存或缓存中,可在计算中重复读取,RDD特点:

  • 它是在集群节点上的不可变的、已分区的集合对象
  • 通过并行转换的方式来创建,如map、filter、join
  • 失败自动重建
  • 可以控制存储级别(内存、磁盘等)来进行重用
  • 必须是可序列化的
  • 是静态类型的
    基于RDD的操作:转换、行动

RDD创建

  • 基于内存对象
    rdd1=sc.parallelize([(“A”,23),(“B”,24),(“C”,29)])
    在这里插入图片描述
  • 读取文件属于转换操作
RDD_A = sc.textFile("./data/A.txt")

在这里插入图片描述

转换(Transformation)

返回值还是一个RDD,如Map、GroupBy操作。转换操作是延迟操作的,只有遇到后续的行动(Action)操作才会执行,这也为代码优化提供可能。转换操作如下:

  • map(func):对RDD中的每个element都使用func,返回一个新的RDD
  • filter(func) : 对RDD中的每个元素都使用func,返回每个执行func为true的元素构成的RDD
  • flatMap(func):和map差不多,但是flatMap生成的是多个结果,扁平化的结果。
  • mapPartitions(func):和map很像,但是map是每个element,而mapPartitions是每个partition
  • mapPartitionsWithSplit(func):和mapPartitions很像,但是func作用的是其中一个split上,所以func中应该有index
  • sample(withReplacement,faction,seed):抽样
  • union(otherDataset):返回一个新的dataset,包含源dataset和给定dataset的元素的集合
  • distinct([numTasks]):返回一个新的dataset,这个dataset含有的是源dataset中的distinct的element
  • groupByKey(numTasks):返回(K,Seq[V]),也就是hadoop中reduce函数接受的key-valuelist
  • reduceByKey(func,[numTasks]):就是用一个给定的reduce func再作用在groupByKey产生的(K,Seq[V]),比如求和,求平均数
  • sortByKey([ascending],[numTasks]):按照key来进行排序,是升序还是降序,ascending是boolean类型
  • join(otherDataset,[numTasks]):当有两个KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks为并发的任务数
  • cogroup(otherDataset,[numTasks]):当有两个KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks 为并发的任务数
  • cartesian(otherDataset):笛卡尔积
    对部分方法举例介绍使用
  • map实现数据的迭代转换,传入的函数接受的参数为RDD中的每个元素
RDD_A.map(lambda x:x.upper()).collect()

在这里插入图片描述

  • filter 实现数据的过滤筛选,传入的函数接受的参数为rdd的每个元素,函数的返回值必须为布尔型
# 筛选RDD_A最后一个字符是C的数据
RDD_A.filter(lambda x:x[-1]=="c").collect()
  • flatMp会将每次返回的结果扁平化,例如:map 返回的 是 [1,2] 那么flatmap返回的是1,2
    在这里插入图片描述

  • reduceByKey可用于文件去重问题
    在这里插入图片描述

行动(Action)

行动(action)操作经常有返回结果或者将数据写入某个地址,比如count、save等,常用方法如下:

  • reduce(func):按照func对数据进行约减
  • collect():将RDD封装成数组返回
  • count():计算数据集中element的个数
  • first():返回数据集中的第一个元素
  • take(n):返回前n个elements
  • takeSample(withReplacement,num,seed):抽样返回数据集中的num个元素,随机种子seed
  • saveAsTextFile(path):写入文本文件到path中
  • saveAsSequenceFile(path):将key-value型数据保存到path中
  • countByKey():返回的是key对应的个数
  • foreach(func):对dataset中的每个元素都使用func
    使用介绍如下
  • take
rdd_a.take(2)

在这里插入图片描述

  • countByKey
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探究 threejs 中的材质与纹理应用

深入探究 threejs 中的材质与纹理应用 一、引言 在三维图形开发领域,Three.js 是一个强大而受欢迎的库。其中,材质与纹理的应用对于创建逼真和吸引人的三维场景起着至关重要的作用。通过对材质和纹理的巧妙运用,可以极大地增强模型的视觉效…

AutoCAD 2024 for Mac(cad设计绘图工具) v2024.3中文激活版

AutoCAD是一款强大的CAD软件,适合于各种领域的设计和绘图。它具有二维图形和三维建模功能、多种文件格式支持、自定义命令和样式、批处理和脚本等特点,可以帮助用户实现高质量的设计和建模。同时,AutoCAD还支持云端存储和共享,方便…

Spring源码之BeanDefinition的加载

Spring源码之BeanFactory和BeanDefinition BeanFactory和BeanDefinitionBeanFactoryBeanDefinition源码分析创建AnnotationConfigApplicationContext对象注册配置类refresh方法 BeanFactory和BeanDefinition BeanFactory BeanFactory是Spring提供给外部访问容器的根接口&…

关于vlookup的第一个参数的个人理解

VLOOKUP(查阅值,包含查阅值和返回值的查找区域,查找区域中返回值的列号,精确查找或近似查找) 我个人理解,第一个参数应该叫线索值,因为我们要通过它去找与其对应的(也就是与其同行的…

7-zip安装教程

一、简介 7-Zip 是一款开源的文件压缩软件,由 Igor Pavlov 开发。它具有高压缩比、支持多种格式、跨平台等特点。使用 C语言编写,其代码在 Github 上开源。 7-Zip的官网: 7-Zip 7-zip官方中文网站: 7-Zip 官方中文网站 7-Zip 的 G…

Day 10:100322. 删除星号以后字典序最小的字符串

Leetcode 100322. 删除星号以后字典序最小的字符串 给你一个字符串 s 。它可能包含任意数量的 ‘’ 字符。你的任务是删除所有的 ’ 字符。 当字符串还存在至少一个 ‘*’ 字符时,你可以执行以下操作: 删除最左边的 ‘*’ 字符,同时删除该星号…

C语言 | Leetcode C语言题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; int numDistinct(char* s, char* t) {int m strlen(s), n strlen(t);if (m < n) {return 0;}unsigned long long dp[m 1][n 1];memset(dp, 0, sizeof(dp));for (int i 0; i < m; i) {dp[i][n] 1;}for (int i m - 1; i > 0;…

Springboot校园食堂智能排餐系统-计算机毕业设计源85935

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园食堂智能排餐系统等问题&#xff0c;对…

Tailwind Classes 我希望早点知道的

以下是一些我希望早点知道的 Tailwind 类&#xff0c;这些类使我的开发过程更加高效&#xff0c;让我的设计更加精致。 line-clamp line-clamp 类在处理多行文本截断时非常有用。它允许你控制显示的文本行数&#xff0c;并截断其余部分。这对于创建一致外观的元素&#xff08;如…

抖音 UG 社招一面算法原题

史上最严热点新机制 或许是受到前段时间「巴黎丢作业」的影响&#xff0c;抖音近日&#xff08;5月27日&#xff09;实施了新的热点内容核实机制。 具体来说&#xff0c;若用户在抖音以热点事件当事人身份发声&#xff0c;抖音将联系当事人进行身份认证。 逾期未认证的用户&…

Flutter开发效率提升1000%,Flutter Quick教程之在特定位置插入Widget

当我们要将Widget插入一个Column,Row或者Listview等有多个子元素的Widget的时候&#xff0c;有两种情况&#xff0c;一种是顺序插入&#xff0c;一种是非顺序插入。顺序插入就是Widget的排列顺序和插入顺序相同&#xff0c;非顺序插入则不是。 一&#xff0c;顺序插入。如图所…

Vue进阶之Vue无代码可视化项目(三)

Vue无代码可视化项目 项目初始化store的使用DataSourceView.vuestores/counter.ts开发模式按钮store/editor.tsLayoutView.vue导航条安装图标iconpackage.jsonstore/debug.tssrc/components/AppNavigator.vueAppNavigator.ts:AppNavigator.vue:theme样式theme/reset.csstheme/v…

重庆耶非凡科技有限公司的选品师项目加盟靠谱吗?

在当今电子商务的浪潮中&#xff0c;选品师的角色愈发重要。而重庆耶非凡科技有限公司以其独特的选品师项目&#xff0c;在行业内引起了广泛关注。对于想要加盟该项目的人来说&#xff0c;项目的靠谱性无疑是首要考虑的问题。 首先&#xff0c;我们来看看耶非凡科技有限公司的背…

【SpringMVC】_设置响应状态码与Header

目录 1. 设置响应状态码 2. 设置响应Header 2.1 设置Content-Type 2.1.1 不使用RequestMapping的produce属性 2.1.2 使用RequestMapping的produce属性 2.2 设置/新增其他Header 1. 设置响应状态码 Spring是基于servlet实现的&#xff0c;设置HTTP响应的状态码可以通过se…

521源码-源码下载-WordPress报错:Allowed memory size of 134217728 bytes exhausted错误解决方法

在wordpress中使用站内搜索或者打开一个页面时提示错误&#xff1a; Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) 致命错误:允许耗尽内存大小为134217728字节(试图分配20480字节) 分析&#xff1a;经过检查发现&#x…

【Ubuntu】【Shell】执行sh脚本报错“xxx.sh:/bin/bash^M:解释器错误: 没有那个文件或目录“

背景 在自己Ubuntu环境执行sh脚本&#xff0c;报错"xxx.sh&#xff1a;/bin/bash^M&#xff1a;解释器错误: 没有那个文件或目录"&#xff0c;查了下是Ubuntu系统默认的shell是dash: 修改配置过下&#xff0c;变成bash 解决方案 在终端执行&#xff1a; sudo dp…

YOLOv8 深度详解!一文看懂,快速上手

YOLOv8 深度详解&#xff01;一文看懂&#xff0c;快速上手 原文&#xff1a;YOLOv8 深度详解&#xff01;一文看懂&#xff0c;快速上手 - 知乎 (zhihu.com) YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本&#xff0c;目前支持图像分类…

处理一对多的映射关系

一对多关系&#xff0c;比如说根据id查询一个部门的部门信息及部门下的员工信息 在Dept类中先添加List emps属性 1、collection DeptMapper.xml文件中 <resultMap id"deptAndEmpResultMap" type"Dept"><id property"did" column&qu…

2024新算法红嘴蓝鹊优化算法,原理详解,MATLAB代码免费获取

红嘴蓝鹊优化算法&#xff08;Red-billed blue magpie optimizer&#xff0c;RBMO&#xff09;是一种受自然启发的群智能优化算法。该算法的灵感来自红嘴蓝鹊的合作和有效的捕食行为。通过对红嘴蓝鹊的搜索、追逐、攻击和食物储存行为的模拟&#xff0c;建立了RBMO的数学模型。…

牛客网刷题 | BC113 数字三角形

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…