spark的RDD算子计算

news2024/9/25 15:22:49

一、环境配置

import os

from pyspark import SparkConf, SparkContext

if __name__ == '__main__':
    os.environ['SPARK_HOME'] = '/export/server/spark'
    os.environ["PYSPARK_PYTHON"] = "/root/anaconda3/envs/pyspark_env/bin/python"
    os.environ["PYSPARK_DRIVER_PYTHON"] = "/root/anaconda3/envs/pyspark_env/bin/python"
    # 2、获取SparkContext对象
    # 2.1 设置我们的任务运行的配置信息
    conf = SparkConf().setMaster('local[2]').setAppName('wordcount01')
    # 2.2 根据配置信息获取SparkContext对象
    sc = SparkContext(conf=conf)

        上面是固定格式!

        重点是学习,不要为了搞明白环境变量而耽误了正事。

二、RDD算子

1.(parallelize、map、filter)转换算子

  list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# list2 = [('k1','v1'),('k2','v2'),('k3','v3')]  #二元组列表
    rdd1 = sc.parallelize(list)
    rdd2 = rdd1.filter(lambda x: x > 3)
    rdd3 = rdd2.map(lambda x: (x, 1))

# 将以上代码执行,然后打开http://node1.itcast.cn:18080/,查看是否生了job,没有job就没有触发任务

# 添加以下行为算子代码,再查看页面
    list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    # list2 = [('k1','v1'),('k2','v2'),('k3','v3')]  #二元组列表
    rdd1 = sc.parallelize(list)
    rdd2 = rdd1.filter(lambda x: x > 3)
    rdd3 = rdd2.map(lambda x: (x, 1))

    # 将以上代码执行,然后打开http://node1.itcast.cn:18080/,查看是否生了job,没有job就没有触发任务

    # 添加以下行为算子代码,再查看页面
    print(rdd1.glom().collect())
    print(rdd2.glom().collect())
    print(rdd3.glom().collect())

 

 

 

 

2.flatmap转换算子

list1 = ['夜曲/发如雪/东风破/七里香', '十年/爱情转移/你的背包',
             '日不落/舞娘/倒带', '鼓楼/成都/吉姆餐厅/无法长大', '月亮之上/荷塘月色']

    rdd1 = sc.parallelize(list1, 2)
    print(rdd1.glom().collect())

    rdd2 = rdd1.flatMap(lambda x: x.split('/'))
    print(rdd2.glom().collect())
    rdd2.foreach(lambda x:print(x))   #foreach对Yarn模式支持不够友好

3.filter转换算子

    rdd1 = sc.textFile('file:///root/test_filter')
    print(rdd1.glom().collect())

    # 使用filter算子过滤缺失和性别为-1的数据
    # 记住后边一定写满足要求的条件
    import re

    rdd2 = rdd1.filter(lambda x: (len(re.split(' +', x)) == 4) and ((re.split(' +', x)[2]) != '-1'))
    print(rdd2.glom().collect())

          踩坑1:

                并没有上传到HDFS,这里是读的本地文件。

        

         踩坑2:

                这里是有空格的,按一个或多个空格分开

 

(30条消息) 正则表达式中的*,+,?以及\w和\W的区别等常见问题的总结_正则表达式\w_Miles-的博客-CSDN博客

                      加了’\s‘也能分,不过加了tab键,会出现’\t'.

 rdd1 = sc.textFile('file:///root/test_filter')
    print(rdd1.glom().collect())

    # 使用filter算子过滤缺失和性别为-1的数据
    # 记住后边一定写满足要求的条件
    import re

    rdd2 = rdd1.filter(lambda x: (len(re.split(r'\s+', x)) == 4) and ((re.split(' +', x)[2]) != '-1'))
    print(rdd2.glom().collect())

         踩坑3:

                filter()保留的是符合条件的数据。

          踩坑4:分区的问题

                至少两个分区。

                

4.union转换算子(会引发shuffle)

5.distinct算子(会引发shuffle)

 

6.groupByKey算子(会引发shuffle)

    list1 = [
        ('hadoop', 1),
        ('hadoop', 1),  # --group by--> hadoop 1,1,1
        ('hadoop', 1)]

    rdd1 = sc.parallelize(list1, 2)
    # print(rdd1.collect())
    print(rdd1.glom().collect())
    rdd2 = rdd1.groupByKey()
    print(rdd2.glom().collect())

    rdd3 = rdd2.map(lambda x: (x[0], *x[1]))
    print(rdd3.glom().collect())

 

         踩坑1:

                不加glom(),结果不会出现分区;加了glom(),结果会出现分区。

    list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    # list2 = [('k1','v1'),('k2','v2'),('k3','v3')]  #二元组列表
    rdd1 = sc.parallelize(list)
    rdd2 = rdd1.filter(lambda x: x > 3)
    rdd3 = rdd2.map(lambda x: (x, 1))

 
    print(rdd1.glom().collect())
    print(rdd1.collect())

                              

 6.reduceByKey算子(会引发shuffle)

     list1 = [
        ('hadoop',1),
        ('hadoop',1),
        ('hadoop',1),
        ('spark',1),
        ('spark',1),
    ]

    rdd1 = sc.parallelize(list1, 2)
    print(rdd1.collect())

    #使用reduceByKey对数据进行分组聚合
    rdd2 = rdd1.reduceByKey(lambda x,y : x + y)
    print(rdd2.collect())

7. repartition转换算子(会引起shuffle)

 

    list1 = ['hadoop','spark','hadoop','hive','hdfs','hadoop','spark','hive','hive','hdfs'
             '123','zookeeper','flink','flink','presto','mysql','hbase']

    #将列表转RDD
    rdd1 = sc.parallelize(list1,2)
    print(rdd1.glom().collect())

    #使用reparation将分区调大
    rdd2 = rdd1.repartition(5)
    print(rdd2.glom().collect())

    rdd3 = rdd2.distinct()
    print(rdd3.glom().collect())

8coalesce 转换算子(建议不使用shuffle) 

     list1 = ['hadoop', 'spark', 'hadoop', 'hadoop', 'hadoop', 'hadoop', 'hadoop', 'hadoop', 'hadoop', 'hadoop']

    # 将列表转RDD
    rdd1 = sc.parallelize(list1, 10)
    print(rdd1.glom().collect())

    # 将单词映射为(单词,1)
    rdd2 = rdd1.map(lambda x: (x, 1))
    print(rdd2.glom().collect())

    # 使用reduceByKey进行单词统计
    rdd3 = rdd2.reduceByKey(lambda x, y: x + y)
    print(rdd3.glom().collect())

    # 因为聚合之后,我们的数据量减少,则需要调小分区
    rdd4 = rdd3.coalesce(2)
    print(rdd4.glom().collect())

 9.reduce行为算子

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    rdd1 = sc.parallelize(list1, 3)
    print(rdd1.glom().collect())

    #reduce算子根据你提供的函数对数据进行累计统计,这里是累加
    #作用:就是对RDD中的每一个元素进行求和
    result1 = rdd1.reduce(lambda x,y: x+y)
    result2 = rdd1.reduce(lambda x,y: x*y)
    print(result1)
    print(result2)

 

 

 

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

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

相关文章

JavaWeb07(MVC应用01[家居商城]连接数据库)

目录 一.什么是MVC设计模式? 1.2 MVC设计模式有什么优点? 二.MVC运用(家居商城) 2.1 实现登录 2.2 绑定轮播【随机三个商品】 2.2.1 效果预览 index.jsp 2.3 绑定最新上架&热门家居 2.3.1 效果预览 2.3.2 代码实现 数据…

linux进程基本知识

1.什么是程序,什么是进程? 程序是静态的概念,例如 gcc xx.c -o pro 磁盘中生成pro文件,叫做程序 进程是程序的一次运行活动,意思是程序跑起来了,系统中就多了一个进程 2.如何查看系统中有哪些进程&…

EMC VNX登录Unisphere错误 certificate has invalid date问题处理

经常有用户反应说,突然用浏览器登录EMC VNX或者Clarrion CX系统的时候出现“certificate has invalid date”的故障,然后无法正常登录图形界面。具体报错如下图所示: 导致这个问题的原因在于VNX系统中的certification认证过期,既然…

SpringBoot整合Echarts实现用户人数和性别展示

一、背景 在Web应用开发中,经常需要使用图表来展示数据,而Echarts是一个非常优秀的图表库。SpringBoot是一个非常流行的Java Web框架,它可以快速搭建Web应用。本文将介绍如何使用SpringBoot集成Echarts,实现展示用户人数和性别的…

百度百科如何创建?创建百度百科的秘诀你值得掌握(经验分享)

百度百科是中国最大的百科全书式的中文网站之一,是广大用户在互联网上获取知识的重要途径之一。任何人都可以在百度百科创建新的词条,为网站的发展作出贡献。 小媒同学将从如何创建百度百科词条和注意事项两个方面来详细介绍百度百科词条的创建流程和相关…

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。…

在选择数据库时需要考虑的因素

在文章的第一部分中,我们奠定了理解各种数据库类型及其用例的基础。随着我们继续探索数据库选择的艺术,我们现在将更深入地探讨影响这个决策过程的关键因素。通过更详细地检查每个因素,我们可以更好地装备自己做出符合项目要求的知情选择&…

ubuntu 卸载 软件包 libfdt-dev

编译环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro NUC980 bsp 自带的编译工具链: nuc980bsp.tar.gz,版本 gcc version 4.8.4 (GCC) NUC980 uboot : https://gitee.com/OpenNuvoton/NUC970_U-Boot_v2016.11 目标 手动编译 NUC9…

【Windows】Windows下载使用wget命令

文章目录 一、前言 & 介绍二、安装步骤2.1 下载 wget 压缩包2.2 解压到指定的位置2.3 检查是否安装成功2.4 是否可以正常下载 一、前言 & 介绍 wget 是 linux 一个下载文件的工具,可以下载一些软件或从远程服务器恢复备份到本地服务器。 wget 在 Linux 下…

PCA主成成分分析例题详解

主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息 需要了解具体细节可看此视频👉:什么是主成成分分析PC…

webpack 5 实战(3)

四十一、代码拆分方式 通过Webpack实现前端项目整体模块化的优势很明显,但是它同样存在一些弊端,那就是项目当中所有的代码最终都会被打包到一起,试想一下,如果说应用非常复杂,模块非常多的话,那打包结果就…

C++ ---- 入门基础知识总结

思维导图 目录 命名空间 命名冲突 如何定义命名空间 命名空间定义语法 嵌套定义 同一工程下定义同名命名空间 命名空间的使用 命名空间名称和作用域限定符(: :) using将命名空间中某个成员“释放”出来 using namespace 命名空间名称 C标准库…

Go:值与指针

1. 计算机中的值 在百万年的演化历史中,人类对事物的属性进行了抽象,有了数量、精度、信息等概念的表示,对应的我们称之为整数、小数、文本文字等。计算机出现后,我们使用计算机对真实世界的问题进行建模,通过计算机的…

WIN10安装CUDA保姆级教程[2023.5.7更新]

本系列分步记录在win10上搭建CUDAcudnnpytorchYOLOv5tensorrt等深度学习架构部署及系统搭建,欢迎关注追更! 目录 0.了解CUDA 1.注意事项 1.1显卡驱动 1.2确定关联性 1.2.1 显卡驱动与cuda的对应关系: 1.2.2 pytorch与cuda的对应关系 2.c…

NLP大模型微调原理

1. 背景 LLM (Large Language Model) 大型语言模型,旨在理解和生成人类语言,需要在大量的文本数据上进行训练。一般基于Transformer结构,拥有Billion以上级别的参数量。比如GPT-3(175B),PaLM(560B)。 NLP界发生三件大事&#xff…

ChatGLM-6B模型微调实战(以 ADGEN (广告生成) 数据集为例,序列长度达 2048)

kingglory/ChatGLM-6B 项目地址 1 介绍 对于 ChatGLM-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,差不多需要 7GB或则8GB 显存即可运行。 2 环境 2.1 python …

【软考-中级】系统集成项目管理工程师-计算题

系统集成项目管理工程师 二、计算题题型一:EMV(预期货币价值)题型二:加权系统题型三:自制和外贸决策——采购管理题型四:沟通渠道——沟通管理题型五:投资回收期、回收率题型六:进度…

metinfo_6.0.0 任意文件读取漏洞复现

一.漏洞简介 MetInfo是一套使用PHP和Mysql开发的内容管理系统。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。 二.漏洞影响 MetInfo 6.0.0 MetInfo 6.1.0 三.漏洞分析 在\MetInfo6.0.0\app\system\i…

推开“任意门”,华为全屋智能正在实现一代科幻迷的童年梦想

科幻作家亚瑟查理斯克拉克有句名言,“任何足够先进的科技,都和魔法无异”。 提到空间魔法,很多科技爱好者或科幻迷会想到哆啦A梦的“任意门”。通过那扇门,可以进入全新的世界,去任何想去的地方,是不少人在…

最新研究,GPT-4暴露了缺点!无法完全理解语言歧义!

夕小瑶科技说 原创作者 |智商掉了一地、Python自然语言推理(Natural Language Inference,NLI)是自然语言处理中一项重要任务,其目标是根据给定的前提和假设,来判断假设是否可以从前提中推断出来。然而,由于…