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 是一个强大而受欢迎的库。其中,材质与纹理的应用对于创建逼真和吸引人的三维场景起着至关重要的作用。通过对材质和纹理的巧妙运用,可以极大地增强模型的视觉效…

数据结构学习笔记(6)--特殊矩阵的压缩存储

1.数组的存储结构 &#xff08;1&#xff09;一维数组的存储结构 起始地址&#xff1a;LOC 各数组元素大小相同&#xff0c;且物理上连续存放。 数组元素a[i]的存放地址LOCi*sizeof(ElemType) (0<i<10) 注&#xff1a;除非题目特别说明&#xff0c;否则数组下标默…

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

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

【webrtc】RtpToNtpEstimator:将 RTP 时间戳映射到 NTP 时间

m98 RtpToNtpEstimator 这个函数的实现反映了实时通信中对于时间同步精确度的高要求,以及处理网络通信中常见的问题(如延迟变化、时间回绕)的复杂性。 RtpToNtpEstimator::UpdateMeasurements 是 WebRTC 中一个用于将 RTP 时间戳映射到 NTP 时间的函数。这个函数的核心功能是…

MySQL之数据库相关操作学习笔记(一)

数据库相关操作 数据库表创建 定义逻辑库、数据表 DML 添加修改删除查询 DCL 用户权限事务 DDL 逻辑库数据表视图索引 DCL (Data Control Language) 示例 DCL&#xff08;数据控制语言&#xff09;主要用于控制数据库用户的访问权限和管理事务。DCL 主要包含两类语句&…

Spring源码之BeanDefinition的加载

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

Spring Boot整合Redis

Spring Boot整合Redis Spring Boot 整合 Redis 是一种常见的做法&#xff0c;用于在 Spring Boot 应用程序中添加缓存、会话管理分布式锁等功能。 浅谈Redis Redis用于存储数据&#xff0c;且在内存当中进行存储。 但是在日常编写代码时&#xff0c;定义一个变量也就是属于在内…

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

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

代码随想录-算法训练营day57【单调栈01:每日温度、下一个更大元素I】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第十章 单调栈part01● 739. 每日温度 ● 496.下一个更大元素 I 详细布置 739. 每日温度 今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。大家可以读题,思考暴力的解法,然后在看单调栈的解法。 就能感…

7-zip安装教程

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

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

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

Java与Web前端:技术融合与未来展望

Java与Web前端&#xff1a;技术融合与未来展望 在当今数字化时代&#xff0c;Java和Web前端技术无疑是软件开发领域的两大重要支柱。它们各自拥有独特的优势和应用场景&#xff0c;但同时也在不断地相互融合&#xff0c;共同推动着技术的发展与创新。本文将从四个方面、五个方…

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;…

用C++做一个跑酷游戏

要用C创建一个跑酷游戏是一个相对复杂的任务&#xff0c;因为它涉及到图形渲染、用户输入处理、物理模拟等多个方面。由于C本身并不直接支持图形渲染&#xff0c;我们通常需要使用一个图形库来帮助我们实现这一点。 一个常用的选择是使用SFML&#xff08;Simple and Fast Mult…

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

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

C语言题目:单词个数统计

题目描述 编写一个程序&#xff0c;输入一个字符串&#xff08;长度不超过80&#xff09;&#xff0c;然后统计出该字符串当中包含有多少个单词。例如&#xff1a;字符串“this is a book”当中包含有4个单词。 输入格式 输入一个字符串&#xff08;长度不超过80&#…

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;顺序插入。如图所…

微信小程序播放音频

微信小程序是一种轻量化、便捷的应用程序&#xff0c;让用户可以直接在微信内享受各种服务。其中&#xff0c;播放音频是微信小程序中非常常见的功能之一。在本文中&#xff0c;我们将详细讲解如何在微信小程序中播放音频。 第一步&#xff0c;准备音频文件 在开始使用微信小程…