3.2 掌握RDD算子

news2024/11/16 0:34:56

一、准备工作

(一)准备文件

1、准备本地系统文件
在这里插入图片描述
在这里插入图片描述
2、把文件上传到HDFS
在这里插入图片描述
在这里插入图片描述

(二)启动Spark Shell

1、启动HDFS服务
在这里插入图片描述
2、启动Spark服务
在这里插入图片描述
3、启动Spark Shell
在这里插入图片描述

二、掌握转换算子

(一)映射算子 - map()

映射算子案例
在这里插入图片描述

任务1、将rdd1每个元素翻倍得到rdd2
对rdd1应用map()算子,将rdd1中的每个元素平方并返回一个名为rdd2的新RDD
在这里插入图片描述
其实,利用神奇占位符_可以写得更简洁
在这里插入图片描述
rdd1和rdd2中实际上没有任何数据,因为parallelize()和map()都为转化算子,调用转化算子不会立即计算结果。
在这里插入图片描述
执行rdd2.collect进行计算,并将结果以数组的形式收集到当前Driver。因为RDD的元素为分布式的,数据可能分布在不同的节点上。
在这里插入图片描述
任务2、将rdd1每个元素平方得到rdd2
方法一、采用普通函数作为参数传给map()算子
在这里插入图片描述
方法二、采用下划线表达式作为参数传给map()算子
在这里插入图片描述
难道就不能用下划线参数了吗?当然可以,但是必须保证下划线表达式里下划线只出现1次。引入数学包scala.math._就可以搞定。
在这里插入图片描述
在这里插入图片描述
任务3、利用映射算子打印菱形
(1)Spark Shell里实现
菱形正立的等腰三角形和倒立的等腰三角形组合而成
在这里插入图片描述
在这里插入图片描述

(2)在IDEA里创建项目实现
在这里插入图片描述
在这里插入图片描述
将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.cxf.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>3.1.3</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
    </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.cxf.rdd.day01包
在这里插入图片描述
在包里创建Example01单例对象
在这里插入图片描述

package net.cxf.rdd.day01

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

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

/**
 * 功能:
 * 作者:cxf
 * 日期:2023年04月19日
 */
object Example01 {
  def main(args: Array[String]): Unit = {
    //创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond") //设置应用名称
      .setMaster("local[*]") //设置主节点位置(本地调试)
    //基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    //输入一个奇数
    print("输入一个奇数:")
    val n =StdIn.readInt()
    //判断n的奇偶性
    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 += _)
    //基于列表创建rdd
    val rdd = sc.makeRDD(list)
    //对rdd进行映射操作
    val rdd1 = rdd.map(i => " " * ((n - i)/2) +"*" * i)
    //输出rdd1结果
    rdd1.collect.foreach(println)

  }

}

在这里插入图片描述

(二)过滤算子 - filter()

过滤算子案例
任务1、过滤出列表中的偶数

整数(Integer):奇数(odd number)+ 偶数(even number)

基于列表创建RDD,然后利用过滤算子得到偶数构成的新RDD

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

在这里插入图片描述

方法二、用神奇占位符改写传入过滤算子的匿名函数

在这里插入图片描述

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

查看源文件/park/words.txt内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输出长度超过20的行
在这里插入图片描述

(三)扁平映射算子 - flatMap()

扁平映射算子案例

任务1、统计文件中单词个数

读取文件,生成RDD - rdd1,查看其内容和元素个数
在这里插入图片描述
对于rdd1按空格拆分,做映射,生成新RDD - rdd2
在这里插入图片描述
对于rdd1按空格拆分,做扁平映射,生成新RDD - rdd3,有一个降维处理的效果
在这里插入图片描述

任务2、统计不规则二维列表元素个数

方法一、利用Scala来实现
在这里插入图片描述

package net.cxf.rdd.day01

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

/**
 * 功能:利用Scala统计不规则二维列表元素个数
 * 作者:cxf
 * 日期:2023年04月19日
 */
object Example02 {
  def main(args: Array[String]): Unit = {
    //创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond") //设置应用名称
      .setMaster("local[*]") //设置主节点位置(本地调试)//
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    //创建不规则二维列表
    val mat = List(
      List(7, 8, 1, 5),
      List(10, 4, 9),
      List(7, 2, 8, 1, 4),
      List(21, 4, 7, -4)
    )
    //输出二维列表
    println(mat)
    //将二维列表扁平化为一维列表
    val arr = mat.flatten
    //输出一维列表
    println(arr)
    //输出元素个数
    println("元素个数:" + arr.size)
  }
}

在这里插入图片描述

方法二、利用Spark RDD来实现
在这里插入图片描述

package net.cxf.rdd.day01

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

import scala.Console.println

/**
 * 功能:利用RDD统计不规则二维列表元素个数
 * 作者:cxf
 * 日期:2023年04月19日
 */
object Example03 {
  def main(args: Array[String]): Unit = {
    //创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond") //设置应用名称
      .setMaster("local[*]") //设置主节点位置(本地调试)//
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    //创建不规则二维列表
    val mat = List(
      List(7, 8, 1, 5),
      List(10, 4, 9),
      List(7, 2, 8, 1, 4),
      List(21, 4, 7, -4)
    )
    //基于二维列表创建rdd1
    val rdd1 = sc.makeRDD(mat)
    //输出rdd1
    rdd1.collect.foreach(x => print(x + " "))
    println()
    //进行扁平化映射
    val rdd2 = rdd1.flatMap(x => x)
      //输出rdd2
      (rdd2.collect.foreach(x => print(x +" ")))
      println()
      //输出元素个数
      println("元素个数:" + rdd2.count)
  }
}

在这里插入图片描述

(四)按键归约算子 - reduceByKey()

按键归约算子案例

任务1、在Spark Shell里计算学生总分

在这里插入图片描述
可以采用神奇的占位符
在这里插入图片描述

任务2、在IDEA里计算学生总分

第一种方式:读取二元组成绩列表
在net.cxf.rdd.day02包里创建CalculateScoreSum01单例对象
在这里插入图片描述

package net.cxf.rdd.day02
package net.huawei.rdd.day02
import org.apache.spark.{SparkConf, SparkContext}
/**
 * 功能:计算总分
 * 作者:cxf
 * 日期:2023年04月26日
 */
object CalculateScoreSum01 {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond") // 设置应用名称
      .setMaster("local[*]") // 设置主节点位置(本地调试)
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    val scores = List(
      ("张钦林", 78), ("张钦林", 90), ("张钦林", 76),
      ("陈燕文", 95), ("陈燕文", 88), ("陈燕文", 98),
      ("卢志刚", 78), ("卢志刚", 80), ("卢志刚", 60))
    // 基于二元组成绩列表创建RDD
    val rdd1 = sc.makeRDD(scores)
    // 对成绩RDD进行按键归约处理
    val rdd2 = rdd1.reduceByKey(_ + _)
    // 输出归约处理结果
    rdd2.collect.foreach(println)
  }
}

在这里插入图片描述

第二种方式:读取四元组成绩列表
在这里插入图片描述

package net.cxf.rdd.day02
import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable.ListBuffer
/**
 * 功能:计算总分
 * 作者:cxf
 * 日期:2023年04月26日
 */
object CalculateScoreSum02 {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond") // 设置应用名称
      .setMaster("local[*]") // 设置主节点位置(本地调试)
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    // 创建四元组成绩列表
    val scores = List(
      ("张钦林", 78, 90, 76),
      ("陈燕文", 95, 88, 98),
      ("卢志刚", 78, 80, 60)
    )
    // 将四元组成绩列表转化成二元组成绩列表
    val newScores = new ListBuffer[(String, Int)]()
    // 通过遍历算子遍历四元组成绩列表
    scores.foreach(score => {
      newScores.append(Tuple2(score._1, score._2))
      newScores.append(Tuple2(score._1, score._3))
      newScores.append(Tuple2(score._1, score._4))}
    )
    // 基于二元组成绩列表创建RDD
    val rdd1 = sc.makeRDD(newScores)
    // 对成绩RDD进行按键归约处理
    val rdd2 = rdd1.reduceByKey(_ + _)
    // 输出归约处理结果
    rdd2.collect.foreach(println)
  }
}


在这里插入图片描述

第三种情况:读取HDFS上的成绩文件
在master虚拟机的/home目录里创建成绩文件 - scores.txt
在这里插入图片描述
将成绩文件上传到HDFS的/input目录
在这里插入图片描述
在net.cxf.rdd.day02包里创建CalculateScoreSum03单例对象
在这里插入图片描述

package net.cxf.rdd.day02
import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable.ListBuffer
/**
 * 功能:计算总分
 * 作者:cxf
 * 日期:2023年04月26日
 */
object CalculateScoreSum03 {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PtintDiamond")
      .setMaster("local[*]")
    // 基于配置创建Spark上下文
    val sc = new SparkContext(conf)

    // 读取成绩文件,生成RDD
    val lines = sc.textFile("hdfs://master:9000/input/scores.txt")
    // 定义二元组成绩列表
    val scores = new ListBuffer[(String, Int)]()
    // 遍历lines,填充二元组成绩列表
    lines.collect.foreach(line => {
      val fields = line.split(" ")
      scores += Tuple2(fields(0), fields(1).toInt)
      scores += Tuple2(fields(0), fields(2).toInt)
      scores += Tuple2(fields(0), fields(3).toInt)
    })
    // 基于二元组成绩列表创建RDD
    val rdd1 = sc.makeRDD(scores)
    // 对成绩RDD进行按键归约处理
    val rdd2 = rdd1.reduceByKey((x, y) => x + y)
    // 输出归约处理结果
    rdd2.collect.foreach(println)
    //将计算结果写入HDFS文件
    rdd2.saveAsTextFile("hdfs://master:9000/output")
  }
}


在这里插入图片描述

(五)合并算子 - union()

合并算子案例
在这里插入图片描述

(六)排序算子 - sortBy()

排序算子案例
一个数组中存放了三个元组,将该数组转为RDD集合,然后对该RDD按照每个元素中的第二个值进行降序排列。
在这里插入图片描述
在这里插入图片描述

(七)按键排序算子 - sortByKey()

按键排序算子案例
将三个二元组构成的RDD按键先降序排列,然后升序排列
在这里插入图片描述
其实,用排序算子也是可以搞定的
在这里插入图片描述

(八)连接算子

1、内连接算子 - join()

内连接算子案例
将rdd1与rdd2进行内连接
在这里插入图片描述

2、左外连接算子 - leftOuterJoin()

左外连接算子案例
rdd1与rdd2进行左外连接
在这里插入图片描述

3、右外连接算子 - rightOuterJoin()

右外连接算子案例
rdd1与rdd2进行右外连接
在这里插入图片描述

4、全外连接算子 - fullOuterJoin()

全外连接算子案例
rdd1与rdd2进行全外连接
在这里插入图片描述

(九)交集算子 - intersection()

交集算子案例
rdd1与rdd2进行交集操作,满足交换律
在这里插入图片描述
A ∩ B ≠ ϕ
在这里插入图片描述

(十)去重算子 - distinct()

1、去重算子案例
去掉rdd中重复的元素
在这里插入图片描述
2、IP地址去重案例
在项目根目录创建ips.txt文件
在这里插入图片描述

192.168.234.21
192.168.234.22
192.168.234.21
192.168.234.21
192.168.234.23
192.168.234.21
192.168.234.21
192.168.234.21
192.168.234.25
192.168.234.21
192.168.234.21
192.168.234.26
192.168.234.21
192.168.234.27
192.168.234.21
192.168.234.27
192.168.234.21
192.168.234.29
192.168.234.21
192.168.234.26
192.168.234.21
192.168.234.25
192.168.234.25
192.168.234.21
192.168.234.22
192.168.234.21

在net.cxf.rdd.day03包里创建DistinctIPs单例对象
在这里插入图片描述

package net.cxf.rdd.day03

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

/**
 * 功能:ip地址去重
 * 作者:cxf
 * 日期:2023年04月26日
 */
object DistinctlPs {
  def main(args: Array[String]): Unit = {
    //创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("PrintDiamond")// 设置应用名称
      .setMaster("local[*]") //设置主节点位置(本地调试)
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    //读取IP地址文件,得到RDD
    val ips = sc.textFile("file://D:/IdeaProjects/SparkRDDDemo/ips.txt") //
    // rdd去重再输出
    ips.distinct.collect.foreach(println)
  }

}

在这里插入图片描述

(十一)组合分组算子 - cogroup()

组合分组算子案例
rdd1与rdd2进行组合分组操作
在这里插入图片描述

三、掌握行动算子

(一)归约算子 - reduce()

归约算子案例
计算1 + 2 + 3 + … … + 100 1 + 2 + 3 + …… + 1001+2+3+……+100的值
在这里插入图片描述
计算1 × 2 × 3 × 4 × 5 × 6 的值(阶乘 - 累乘)
在这里插入图片描述

(二)采集算子 - collect()

采集算子案例
显示RDD的全部元素
在这里插入图片描述

(三)首元素算子 - first()

首元素算子案例
显示RDD的首元素
在这里插入图片描述

(四)计数算子 - count()

计数算子案例
统计RDD的元素个数
在这里插入图片描述
如果要统计单词个数,那就要采用扁平映射算子
在这里插入图片描述

(五)按键计数算子 - countByKey()

按键计数算子案例
List集合中存储的是键值对形式的元组,使用该List集合创建一个RDD,然后对其进行countByKey的计算
在这里插入图片描述
注意:元素必须是键值对的二元组,不能是三元组
在这里插入图片描述

(六)前截取算子 - take(n)

前截取算子案例
返回集合中前任意多个元素组成的数组
在这里插入图片描述

(七)排序前截取算子 - takeOrdered(n)[(ordering)]

排序前截取算子案例
返回RDD前n个元素(升序)
在这里插入图片描述
返回前n个元素(降序)
在这里插入图片描述
其实,可以top(n)算子来实现同样的效果,更简单
在这里插入图片描述

(八)遍历算子 - foreach()

遍历算子案例
将RDD里的每个元素平方后输出(一定要采集,才能遍历)
在这里插入图片描述
将RDD的内容逐行打印输出
在这里插入图片描述

(九)存文件算子 - saveAsFile()

存文件算子案例
将rdd内容保存到HDFS的/park/out目录
在这里插入图片描述
查看另存的结果文件
在这里插入图片描述

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

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

相关文章

Sketch在线版免费使用,Windows也能用的Sketch!

Sketch 的最大缺点是它对 Windows/PC 用户不友好。它是一款 Mac 工具&#xff0c;无法在浏览器中运行。此外&#xff0c;使用 Sketch 需要安装其他插件才能获得更多响应式设计工具。然而&#xff0c;现在有了 Sketch 网页版工具即时设计替代即时设计&#xff01; 即时设计几乎…

通达信凹口平量柱选股公式,倍量柱之后调整再上升

凹口平量柱是一组量柱形态&#xff0c;表现为量柱两边高、中间扁平或圆底的形态。如下图所示&#xff0c;左右各有一根高度持平的高量柱&#xff0c;中间夹杂着三五根甚至更多根低量柱。 凹口平量柱选股公式需要结合量柱以及K线&#xff0c;主要考虑以下三点&#xff1a; 1、倍…

git各阶段代码修改回退撤销操作

git push origin master 的含义是将本地当前分支的提交推送到名为 origin 的远程仓库的 master 分支上。 各阶段代码修改回退撤销的操作 case1 git checkout -- . 修改了文件内容但没还有git add 或git commit时撤销当前目录下所有文件的修改 case2 当完成了git add 之后&a…

项目管理:面对未知的挑战时,如何获取和使用信息?

一项实验展示了人们在面对未知的挑战时&#xff0c;对信息的获取和使用的影响。在下面的实验中&#xff0c;三组人被要求步行到十公里外的三个村庄。 第一组人没有任何信息&#xff0c;只跟着向导走。他们在走了短短的两三公里后就开始抱怨和情绪低落&#xff0c;同时感到疲惫…

2022年天府杯全国大学生数学建模竞赛E题地铁线路的运营与规划解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 E题 地铁线路的运营与规划 原题再现&#xff1a; 地铁是一种非常绿色快捷的交通出行方式&#xff0c;全国各大城市也都在如火如荼地进行地铁线路建设与规划。但乘坐地铁有时候会感觉特别拥挤&#xff0c;这一时期我们称为高峰期。如何合理…

sqlserver中的merge into语句

merge into语句是用来合并两张表的数据的&#xff0c;比如我们想把一张表的数据批量更新到另外一张表&#xff0c;就可以用merge into语句。具体有哪些业务场景呢&#xff1f; 1.数据同步 2.数据转换 3.基于源表对目标表进行增&#xff0c;删&#xff0c;改的操作。 实践步骤…

JavaScript了解调用带参函数,无参函数的代码

以下为JavaScript了解调用带参函数&#xff0c;无参函数的程序代码和运行截图 目录 前言 一、带参函数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、无参函数 2.1 运行流程及思想 2.2 代码段 2.3 JavaScript语句代码 2.4 运行截图 前言…

让代码创造童话,共建快乐世界:六一儿童节特辑

让代码创造童话&#xff0c;共建快乐世界&#xff1a;六一儿童节特辑 六一儿童节即将来临&#xff0c;这是一个属于孩子们的快乐节日。为了让这个节日更加有趣&#xff0c;我们发起了“让代码创造童话&#xff0c;共建快乐世界”六一活动。在这个活动中&#xff0c;我们邀请您…

使用Tensorrt对YOLOv5目标检测的代码进行加速

文章目录 1. 前言2. 官网3. 安装依赖3.1. 安装OpenCV3.1.1. 安装3.1.2. 添加环境变量3.1.3. 查看版本 3.2. 安装TensorRT3.2.1. 下载3.2.2. 安装3.2.3. 添加环境变量 4. 下载项目5. 生成WTS模型6. cmake6.1. 生成Makefile6.1.1. 配置CMakeLists.txt6.1.1.1. 修改编译依赖的路径…

通过python采集1688商品评论数据封装接口、1688评论数据接口

1688商品评论数据是指在1688网站上对商品的评价和评论信息。这些信息包括买家对商品的使用、品质、包装、服务等方面的评价和意见&#xff0c;可以帮助其他用户更好地了解商品的优缺点和性能&#xff0c;从而做出更明智的购买决策。 1688网站是中国最大的B2B电子商务网站之一&…

RK3566调试EC20

参考博客&#xff1a;RK3568开发笔记-buildroot移远EC20模块调试记录 一、内核配置 cd 到kernel目录&#xff0c;执行make ARCHarm64 menuconfig&#xff0c; Device Drivers >USB support > USB Serial Converter support 选中 USB driver for GSM and CDMA modems选…

04.hadoop上课笔记之java编程和hbase

1.win查看服务 netstat -an #linux也有#R数学建模语言 SCALAR 2.java连接注意事项,代码要设置用户 System.setProperty("HADOOP_USER_NAME", "hadoop");3.伪分布式的好处(不用管分布式细节,直接连接一台机器…,适合用于学习) 4.官方文档 查看类(static |…

5个UI设计师必备的Figma汉化插件

即时设计插件广场提供了许多有用的 UI 插件&#xff0c;帮助优化产品设计过程。其中&#xff0c;产品组件库 Figma 汉化插件对常用的 PC 端和移动端组件进行了筛选&#xff0c;使其更加聚焦和精简。PC 端组件包括基础、按钮、菜单和其他元素&#xff0c;移动端组件包括基础、按…

电子阅读器calibre的使用技巧

十条calibre使用技巧&#xff1a; 1. 添加电子书&#xff1a;可以单独添加文件、添加文件夹、添加zipped书籍&#xff0c;或者通过网络链接直接添加。 2. 转换电子书格式&#xff1a;可以将电子书转换为不同的格式&#xff0c;如AZW3、EPUB、MOBI、PDF等。 3. 修改元数据&am…

文件夹加密超级大师的金钻加密和闪电加密有什么区别?

作为一款专业的文件夹加密软件&#xff0c;文件夹加密超级大师提供了5种文件加密类型&#xff0c;其中金钻加密和闪电加密在加密后效果看似差不多&#xff0c;那么它们有什么区别呢&#xff1f;下面我们就来了解一下吧。 闪电加密更快速 当我们想要加密那些超级庞大的文件夹时…

Docker安装kafka可视化管理工具 - Kafka Manager

说明&#xff1a;此处是在前面使用Docker安装kafka的基础之上&#xff0c;再来使用Docker安装kafka-manager 第一步&#xff1a;使用下述命令从Docker Hub查找镜像&#xff0c;此处我们要选择的是sheepkiller所构建的kafka-manager镜像 docker search kafka-manager 第二步&a…

人工智能生成内容(AIGC):概念、发展历史及其机遇、挑战与未来方向

人工智能生成内容&#xff08;AIGC&#xff09; 人工智能生成内容&#xff08;Artificial Intelligence Generated Content, AIGC&#xff09;&#xff0c; AIGC 是指使用生成式 AI &#xff08;Generative Artificial Intelligence, GAI&#xff09; 技术生成的内容&#xff…

基于SSM+Vue前后端分离的勤工助学管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 Web服…

网络通信的序列化和反序列化

序列化与反序列化的定义 由于在系统底层&#xff0c;数据的传输形式是简单的字节序列形式传递&#xff0c;即在底层&#xff0c;系统不认识对象&#xff0c;只认识字节序列&#xff0c;而为了达到进程通讯的目的&#xff0c;需要先将数据序列化&#xff0c;而序列化就是将对象…

【SpringBoot_Project_Actual combat】 Summary of Project experience_需要考虑的问题

无论是初学者还是有经验的专业人士&#xff0c;在学习一门新的IT技术时&#xff0c;都需要采取一种系统性的学习方法。那么作为一名技术er&#xff0c;你是如何系统的学习it技术的呢。 一、DB Problems 数据库数据类型与java中数据类型对应问题&#xff1f; MySql数据库和java…