12-pyspark的RDD算子注意事项总结

目录

    • 相近算子异同总结
      • 相近变换算子异同
        • foreach和foreachPartition
        • fold和reduce
        • coalesce和repatition
      • 相近动作算子异同
        • cache和persist
    • 算子注意事项
      • 需要注意的变换算子
      • 需要注意的动作算子


PySpark实战笔记系列第三篇

  • 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)
  • 11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))
  • 12-pyspark的RDD算子注意事项总结(PySpark实战笔记系列第三篇)

相近算子异同总结

相近变换算子异同

foreach和foreachPartition
  • 在应用foreachPartition操作时,定义的函数f在函数体中打印值时,需要用for x in iter进行循环。foreach操作则可直接用print(x)打印
  • 一般来说,利用foreachPartition效率比foreach要高,foreachPartitions操作是一次性处理一个partition的数据。

在这里插入图片描述

fold和reduce
  • fold函数和reduce函数功能是相同的,差别在于fold可以提供一个初始值来进行聚合
  • eg:有四个元素[1,2,3,4],reduce是直接把四个元素累加,即sum;fold则可以设定一个初始值,再进行累加,比如初始值是10,则就是10+1+2+3+4这样的累加。
coalesce和repatition
  • repartition()方法就是coalesce()方法shuffle为true的情况。

  • 如果要减少分区数量,建议采用rdd.coalesce(numPartitions, false)方法,这样可以避免shuffle导致数据混洗,从而提高计算效率!

    【备注】:在实际计算中,有时可能需要重新设置RDD的分区数量,如果要处理的数据量小,那么默认的分区可能比较多,这就可能导致计算速度比较慢(不同分区之间的任务调度时间比计算数据本身耗时),因此在计算过程中,可以设置一个比较合理的分区数,从而提高计算效率。

相近动作算子异同

cache和persist
  • rdd.cache()在RDD对象上进行缓存操作,后续的RDD操作会直接从内存中加载数据进行计算
  • 缓存操作rdd.persist(storageLevel),它可以指定存储级别storageLevel。

算子注意事项

需要注意的变换算子

  • takeSample操作:会将RDD整个加载到driver端的内存中,因此takeSample操作应用需在RDD数据不大的情况下。
  • randomSplit操作:这种随机分割在一些数据挖掘或者机器学习算法中非常有用,由于这些算法需要数据的训练集合和测试集合,因此需要把总的数据集合进行随机切分,比如70%用于训练,30%用于测试。
  • Python 3+环境下,在Spark集群上使用distinct()、reduceByKey()和join()等几个函数时,可能会触发PYTHONHASHSEED异常,即Randomness of hash of string should be disabledvia PYTHONHASHSEED,此时可以在在spark-defaults.conf设置spark.executorEnv.PYTHONHASHSEED=0。
  • cartesian操作:如果rdd1和rdd2元素个数比较多,直接进行cartesian计算可能会出现内存不足的情况。

需要注意的动作算子

  • collect操作:对于少量RDD数据的观察非常有用,海量会引起内存不足等情况。因为collect操作会将RDD数据汇总到一处,如果数据量非常大,那么可能会出现内存不足等情况,因此不适合海量数据的查看。
  • saveAsTextFile操作:数据保存当设定的目录不存在时,执行此操作则会报错。生成的数据是多个文件组成的。

参考文档:

  • https://spark.apache.org/docs/latest/api/python/reference/pyspark.html
  • 《Python大数据处理库PySpark实战》

博主写博文就是方便对自己所学所做的事做一备份记录或回顾总结。欢迎留言,沟通学习。

刚开始接触,请多指教,欢迎留言交流!

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

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

相关文章

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

集合系列(十九) -List与数组互转操作介绍

一、数组转List 方式一 通过 Arrays.asList(strArray) 方式,将数组转换List,但不能对List增删,只能查改,否则抛异常,例子如下: public static void main(String[] args) {//创建一个字符串数组String[] …

EFcore 6 连接oracle19 WinForm vs2022

用EFcore访问Oracle,终于不需要Oracle的什么安装包了,直接在VS2022中就可以轻松搞定。在csdn上看到一哥们的帖子,测试了一下,发现很方便。使用的场景是:VS2022中EFcore6。经过测试,同 Navicat Premium 16比…

ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…

Windows终端添加git bash

环境:windows11 终端:windows terminal git bash默认的界面不太好看,添加到终端会比较好用 步骤 打开 windows terminal,在向下箭头 点击 设置左侧栏 点击 “添加新配置文件”,如下图配置,主要修改项&…

牛客2024【牛客赛文X】春招冲刺ONT61 每日温度【hard 单调栈 Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/1f54e163e6944cc7b8759cc09e9c78d8 思路 单调栈最直接的应用就是获取数组中每个位置i,i的左边第一个比i大或者小的位置/数以及,i的右边第一个比i大或者小的位置/数不懂的同学看这里https://blog.csdn.net/Borsl…

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云,安装docker暴露一下端口,就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…

使用Docker部署Node.js

第一步:在Node.js项目的根目录中新建Dockerfile文件 # 使用官方 Node.js 镜像作为基础镜像 FROM node:latest# 设置工作目录 WORKDIR /usr/src/app# 将项目文件复制到容器中 COPY . .# 将npm源设置为淘宝镜像 RUN npm config set registry https://registry.npmmir…

大数据深度学习:基于Tensorflow深度学习的神经网络CNN算法垃圾分类识别系统

文章目录 大数据深度学习:基于Tensorflow深度学习的神经网络CNN算法垃圾分类识别系统一、项目概述二、深度学习卷积神经网络(Convolutional Neural Networks,简称CNN)三、部分数据库架构四、系统实现系统模型部分核心代码模型训练…

React + three.js 3D模型面部表情控制

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 示例项目(github):https://github.com/couchette/simple-react-three-facial-expression-demo 示例项目(gitcode)&#xff…

嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验

一、实验目的 了解AAC音频格式,掌握AAC音频解码的原理,并实现将AAC格式的音频解码为PCM 二、实验原理 音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如,假设您想创建一个测试方法,该方法将多次访问网站上的某个页面,并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…