掌握RDD算子

news2024/12/24 21:16:54

文章目录

      • 一、准备本地系统文件
      • 二、把文件上传到HDFS
      • 三、启动HDFS服务
      • 四、启动Spark服务
      • 五、启动Spark Shell
      • 六、映射算子案例
        • 任务1、将rdd1每个元素翻倍得到rdd2
        • 任务2、将rdd1每个元素平方得到rdd2
        • 任务3、利用映射算子打印菱形
        • IDEA里创建项目实现
      • 七、过滤算子案例
        • 任务1、过滤出列表中的偶数
        • 任务2、过滤出文件中包含spark的行

一、准备本地系统文件

  • /home目录里创建words.txt
  • 在这里插入图片描述在这里插入图片描述

二、把文件上传到HDFS

  • words.txt上传到HDFS系统的/park目录里
    在这里插入图片描述
  • 说明:/park是在上一讲我们创建的目录

三、启动HDFS服务

  • 执行命令:start-dfs.sh在这里插入图片描述

四、启动Spark服务

  • 执行命令:start-all.sh在这里插入图片描述

五、启动Spark Shell

-执行命令:spark-shell --master spark://master:7077
在这里插入图片描述

六、映射算子案例

  • 预备工作:创建一个RDD - rdd1
  • 执行命令:val rdd1 = sc.parallelize(List(1, 2, 3, 4, 5, 6))

在这里插入图片描述

任务1、将rdd1每个元素翻倍得到rdd2

  • 对rdd1应用map()算子,将rdd1中的每个元素平方并返回一个名为rdd2的新RDD
    在这里插入图片描述
  • 其实,利用神奇占位符_可以写得更简洁
    在这里插入图片描述
  • rdd1和rdd2中实际上没有任何数据,因为parallelize()和map()都为转化算子,调用转化算子不会立即计算结果。
    在这里插入图片描述
  • 若需要查看计算结果,则可使用行动算子collect()。(collect是采集或收集之意)
    在这里插入图片描述

任务2、将rdd1每个元素平方得到rdd2

  • 方法一、采用普通函数作为参数传给map()算子
    在这里插入图片描述
  • 方法二、采用下划线表达式作为参数传给map()算子
    在这里插入图片描述
  • rdd2的元素变成了双精度实数,得转化成整数
    在这里插入图片描述

任务3、利用映射算子打印菱形

  • 右半菱形

val rdd = sc.makeRDD(List(1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1))
val rdd1 = rdd.map(“*” * _)
rdd1.collect.foreach(println)

在这里插入图片描述

IDEA里创建项目实现

  • 创建Maven项目 - SparkRDDDemo
    在这里插入图片描述
  • 将java目录改成scala目录
    在这里插入图片描述
  • 在pom.xml文件里添加相关依赖和设置源程序目录
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.hw.rdd</groupId>
    <artifactId>SparkRDDDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.4</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.3.2</version>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

  • 添加日志属性文件
    在这里插入图片描述
log4j.rootLogger=ERROR, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spark.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

  • 创建hdfs-site.xml文件,允许客户端访问集群数据节点
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <description>only config in clients</description>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>

  • 创建net.xxr.rdd.day01包
    在这里插入图片描述
  • 在net.xxr.rdd.day01包里创建Example01单例对象
    在这里插入图片描述
package net.xxr.rdd.day01

import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable.ListBuffer
import scala.io.StdIn

object Example01 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setAppName("PrintDiamond")
      .setMaster("local[*]")

    val sc = new SparkContext(conf)
    print("输入一个奇数:")
    val n = StdIn.readInt()
    if (n % 2 == 0) {
      println("你输入的不是奇数哦~")
      return
    }
    val list = new ListBuffer[Int]()
    (1 to n by 2).foreach(list += _)
    (n - 2 to 1 by -2).foreach(list += _)
    val rdd = sc.makeRDD(list)
    val rdd1 = rdd.map(i => " " * ((n - i) / 2) + "*" * i)
    rdd1.collect.foreach(println)
  }

}

  • 查看结果
    在这里插入图片描述

七、过滤算子案例

任务1、过滤出列表中的偶数

  • 方法一、将匿名函数传给过滤算子

val rdd1 = sc.makeRDD(List(4, 7, 9, 2, 45, 89, 120, 666, 25, 129))
val rdd2 = rdd1.filter(x => x % 2 == 0)
rdd2.collect

在这里插入图片描述

  • 方法二、用神奇占位符改写传入过滤算子的匿名函数
    在这里插入图片描述

任务2、过滤出文件中包含spark的行

  • 执行命令: val lines= sc.textFile(“/park/words.txt”),读取文件 /park/words.txt生成RDD - lines
    在这里插入图片描述
  • 执行命令:val sparkLines = lines.filter(_.contains(“spark”)),过滤包含spark的行生成RDD - sparkLines
    在这里插入图片描述
  • 执行命令:sparkLines.collect,查看sparkLines内容,可以采用遍历算子,分行输出内容

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

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

相关文章

编写 ROS 服务节点 Service 和 Client(python/C++)(六)

1.编写 Service 节点&#xff08;C&#xff09; 进入目录 cd ~/catkin_ws/src/beginner_tutorials/src然后vim server.cpp 复制代码粘贴&#xff0c;shiftinsert 粘贴 &#xff0c;然后按Esc 键&#xff0c;然后输入:wq 就可以保存退出了 #include "ros/ros.h" …

OSI分层

1 应用层 最上层的&#xff0c;也是我们能直接接触到的就是应用层&#xff08;Application Layer&#xff09;&#xff0c;我们电脑或手机使用的应用软件都是在应用层实现。那么&#xff0c;当两个不同设备的应用需要通信的时候&#xff0c;应用就把应用数据传给下一层&#x…

小航助学信息学奥赛C++ GoC模拟试卷(含题库答题软件账号)

信息学奥赛C GoC系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 单选题10.0分 删除编辑 答案:C 第1题goc命令可以通过多命令拼接方式&#xff0c;优化代码布局&#xff0c;…

DHTMLX Suite JS PRO 8.1.1 Crack

适用于现代 Web 应用程序的强大 JavaScript 小部件库 - DHTMLX 套件 用于创建现代用户界面的轻量级、快速且通用的 JavaScript/HTML5 UI 小部件库。 DHTMLX Suite 有助于推进 Web 开发和构建具有丰富功能的数据密集型应用程序。 DHTMLX Suite 是一个 UI 小部件库&#xff0c;用…

用于脑MRI分割的注意对称自动编码器

文章目录 Attentive Symmetric Autoencoder for Brain MRI Segmentation摘要本文方法Attentive Reconstruction Loss位置编码SPE下游任务网络结构 实验结果 Attentive Symmetric Autoencoder for Brain MRI Segmentation 摘要 基于图像块重建的自监督学习方法在训练自动编码器…

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

6个AI绘画网站,可生成海报

目录 1、Midjourney 2、Stable Diffusion Omline 3、Microsoft Designer 4、Craiyon 5、NightCafe S 6、Wombo 1、Midjourney 特点&#xff1a;业内标杆&#xff0c;效果最强大 Midjourney是基于diffusion的AI图画艺术生成器。生成图片不局限于二次元人物&#xff0c;能够…

产品经理在空窗期该做什么?

最近一段时间&#xff0c;就业形势越来越严峻&#xff0c;尤其是互联网行业&#xff0c;尤其是产品经理这个岗位竞争更是激烈&#xff0c;很多产品经理都难免有了数个月的空窗期&#xff0c;而空窗期的存在又使得产品经理竞争力下降&#xff0c;形成了负循环。而唯一能打破这种…

FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

这里写目录标题 1、前言2、我这里已有的视频图像编解码方案3、H265--视频压缩理论4、H265--视频压缩--性能表现5、H265--视频压缩--设计方案6、H265--视频压缩--时序7、Vivado工程详解8、移植上板应用9、Vivado功能仿真10、福利&#xff1a;工程代码的获取 1、前言 H265视频压…

十大排序算法之冒泡排序、快速排序的介绍

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 目录 冒泡排序冒泡排序代码冒泡排序优化 快速排序快速排序代码 冒泡排序 说起来冒泡排…

推荐8款在win11上还能用的“古董级”软件

前几天花重金1.3个w买了一台新电脑华为一体机MateStation X 2023&#xff0c;用了近10年的华硕迷你电脑终于要下岗了。这么多年来一直在用win7操作系统&#xff0c;现在直接迭代到win11了&#xff0c;以前几个用得称手的工具软件不舍得扔&#xff0c;拷到新电脑上居然还能用&am…

前端之CSS常用选择器分享~

目录 1. 标签选择器 2. 类选择器 3. id选择器 4. 后代选择器 5. 子代选择器 6. 并集选择器 7. 兄弟选择器 1. 标签选择器 ● 基本格式 : 标签名{属性1: ; 属性2: ; 属性3: ;....} ● 示例代码 <body><style>div {width: 100px;height: 100px;background-co…

【微报告】行泊一体低、中、高算力平台,谁能率先突围?

行泊一体是大势所趋&#xff0c;且正分层发展&#xff0c;这是业内已有的共识。但对身处其中的竞争者&#xff0c;更重要且更难的显然为踏准市场节奏&#xff0c;从而用既有的资源取舍布局&#xff0c;最终吃下窗口期爆发红利&#xff0c;在细分赛道中脱颖而出。 高工智能汽车…

[Hadoop]数据仓库基础与Apache Hive入门

目录 大数据导论与Linux基础 Apache Hadoop、HDFS 大数据导论与Linux基础 数据仓库基本概念 数据仓库概念 数据仓库主要特征 数据仓库主流开发语言--SQL Apache Hive入门 Apache Hive概述 场景设计&#xff1a;如何模拟实现Hive功能 Apache Hive架构、组件 Apache H…

Python实现ACO蚁群优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

深入理解 go sync.Waitgroup

本文基于 Go 1.19。 go 里面的 WaitGroup 是非常常见的一种并发控制方式&#xff0c;它可以让我们的代码等待一组 goroutine 的结束。 比如在主协程中等待几个子协程去做一些耗时的操作&#xff0c;如发起几个 HTTP 请求&#xff0c;然后等待它们的结果。 WaitGroup 示例 下面…

CH32V3xx USART 空闲中断+DMA接收

目录 1、CH32V3xx USART简介2、测试程序2.1 USART 初始化配置2.1 发送函数2.1 接收中断1、CH32V3xx USART简介 CH32V3xx系列MCU包含3个同步异步收发器(USART1、2、3)和5个通用异步收发器(UART4、5、6、7、8)。USART模块支持DMA功能,DMA可以实现快速连续收发。使用DMA发送时…

windows安装pcl

文章目录 vcpkg方式安装默认安装x86默认没安装cloud_viewer.h AllInOne安装pcl的官方例程 vcpkg方式安装 官方建议在windows下&#xff0c;采用vcpkg的方式来安装&#xff1a; 安装vcpkg的&#xff0c;可以看这里&#xff1a;【WIN安装vcpkg】 默认安装x86 要注意的是 vcpkg…

品牌线上推广:如何进行电商控价?

随着电商平台的迅速崛起&#xff0c;电商控价已经成为了一个十分重要的话题。所谓电商控价&#xff0c;是指在电子商务平台上&#xff0c;品牌方针对自己的产品进行价格的控制&#xff0c;以确保产品的售价不被平台和第三方商家恶意砍价而影响品牌形象和盈利。那么&#xff0c;…

iptables 防火墙(二)SNAT/DNAT

目录 一&#xff1a;SNAT原理与应用 1.SNAT介绍 2.SNAT 应用环境 3.SNAT原理 二&#xff1a;SNAT配置 第一步&#xff1a;设置各个端口的网卡 1.先准备客户机、web服务器、网关服务器 2.网关服务器设置 &#xff08;1&#xff09;添加网卡 &#xff08;2&#xff09;修…