MapReduce代码

news2024/11/19 15:12:46

WordCount

数据准备:

a.txt

lxy lxy
lxy zhang
wsoossj liagn
guui
liang
liagn

代码(在idea中创建一个Maven工程):

mapper:

package com.lxy.mr.wordcount.thi;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/13
 * Time: 18:53
 */
public class WCMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        String line = value.toString();
        for (String word : line.split(" ")) {
            Text outKey = new Text();
            outKey.set(word);

            LongWritable outValue = new LongWritable();
            outValue.set(1);

            context.write(outKey,outValue);
        }
    }
}

reducer

package com.lxy.mr.wordcount.thi;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapreduce.Reducer;

import javax.xml.soap.Text;
import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/13
 * Time: 18:59
 */
public class WCReducer extends Reducer<Text, LongWritable,Text,LongWritable> {
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        long sum = 0;
        for (LongWritable word : values) {
            long l = word.get();
            sum += l;
        }
        LongWritable outValue = new LongWritable();
        outValue.set(sum);

        context.write(key,outValue);
    }
}

driver

在本地运行的代码

就是右键运行

package com.lxy.mr.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;


/**
 * Author: Liang_Xinyu
 * Date: 24/05/13
 * Time: 6:25
 * 在本地运行
 */
public class WCDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Job job = Job.getInstance(new Configuration());

        //2.给Job设置参数 -- 包含mapper和reducer类
        //2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置
        job.setJarByClass(WCDriver.class);
        //2.2设置Mapper和Reducer类
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
        //2.3设置Mapper输出的key,value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        //2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        //2.5设置输入和输出路径
        //设置输入路径--数据所在的路径
        FileInputFormat.setInputPaths(job,new Path("D:\\io\\input"));
        //设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错
        FileOutputFormat.setOutputPath(job,new Path("D:\\io\\output"));

        //3.提交Job
        /*
            boolean waitForCompletion(boolean verbose)
            verbose : 是否打印执行的进度
            返回值 : 如果Job执行成功返回true否则返回false
         */
        boolean b = job.waitForCompletion(true);
        System.out.println("b========" + b);
    }
}
在集群运行的代码
在集群上运行Job
1.修改代码 - 输入路径和输出路径从main方法读取
2.打jar包
3.将jar包放到一个有权限的目录中(我放到了家目录)
4.在HDFS上准备数据
5.运行jar包 : hadoop jar xxx.jar 全类名 参数1 参数2
6.查看hadoop103:8088 是否有Job提交
7.查看hadoop102:9870 查看结果
package com.lxy.mr.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 7:45
 * 在HDFS上提交运行
 */
public class WCDemo3 {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        //创建Job实例
        Job job = Job.getInstance(new Configuration());

        //2.给Job设置参数 -- 包含mapper和reducer类
        //2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置
        job.setJarByClass(WCDemo3.class);
        //2.2设置Mapper和Reducer类
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
        //2.3设置Mapper输出的key,value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        //2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        //2.5设置输入和输出路径
        //设置输入路径--数据所在的路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        System.out.println("b = " + job.waitForCompletion(true));
    }
}

在集群运行要在VMVare WorkStation或XShell敲命令!!!

  • 先打jar包在这里插入图片描述
  • 再把jar包拖集群里
    在这里插入图片描述
  • 然后敲命令

hadoop jar xxx.jar 全类名 参数1 参数2
这是我的:hadoop jar MRDemo-1.0-SNAPSHOT.jar com.lxy.mr.wordcount.WCDemo3 /input /output
全类名这样获取:
在这里插入图片描述
我们在代码里设置的参数1和参数2分别是
集群上的输入路径和输出路径
这是输入路径
在这里插入图片描述
输出路径一定不要存在,否则会报错,空着就好
在这里插入图片描述
我在执行中遇到了ClassNotFoundException

就把代码中的类名换成全类名解决了,一般是不需要的
在这里插入图片描述

用Windows向集群提交

从本地向集群提交 – 知道即可
1.配置参数
//设置在集群运行的相关参数-设置HDFS,NAMENODE的地址
conf.set(“fs.defaultFS”, “hdfs://hadoop102:8020”);
//指定MR运行在Yarn上
conf.set(“mapreduce.framework.name”,“yarn”);
//指定MR可以在远程集群运行
conf.set(“mapreduce.app-submission.cross-platform”,“true”);
//指定yarn resourcemanager的位置
conf.set(“yarn.resourcemanager.hostname”,“hadoop103”);
2.输入路径和输出路径从main方法读取
3.打jar包
4. //注释掉下面代码
//job.setJarByClass(WCDriver3.class);
//添加如下代码 - 设置jar包路径
job.setJar(“jar包路径”);

5.
   在右上角点击EditConfigurations -> 左边选类名(没有先运行一次该类)
       右面选modify Options -> add vm options
        ->  在 vm options的输入框中添加: -DHADOOP_USER_NAME=lxy
            在 program Arguments添加 :hdfs://hadoop102:8020/input hdfs://hadoop102:8020/output33
package com.lxy.mr.wordcount;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 1:01
 * 从本地向集群提交
 */
public class WCDriver2 {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

//        Job job = Job.getInstance(new Configuration());
        Configuration conf = new Configuration();
        //设置在集群运行的相关参数-设置HDFS,NAMENODE的地址
        conf.set("fs.defaultFS", "hdfs://hadoop102:8020");
        //指定MR运行在Yarn上
        conf.set("mapreduce.framework.name","yarn");
        //指定MR可以在远程集群运行
        conf.set("mapreduce.app-submission.cross-platform","true");
        //指定yarn resourcemanager的位置
        conf.set("yarn.resourcemanager.hostname","hadoop103");

        Job job = Job.getInstance(conf);
        //2.给Job设置参数 -- 包含mapper和reducer类
        //2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置
//        job.setJarByClass(WCDriver2.class);

        job.setJar("D:\\words\\idea\\MRDemo\\target\\MRDemo-1.0-SNAPSHOT.jar");

        //2.2设置Mapper和Reducer类
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);

        //2.3设置Mapper输出的key,value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);

        //2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

        //2.5设置输入和输出路径
        //设置输入路径--数据所在的路径 yarn:args[0]
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //3.提交Job
        /*
            boolean waitForCompletion(boolean verbose)
            verbose : 是否打印执行的进度
            返回值 : 如果Job执行成功返回true否则返回false
         */
        System.out.println("b ==== " + job.waitForCompletion(true));
    }
}

向集群提交的配置在这里修改:
在这里插入图片描述
在这里插入图片描述
我们之前的代码都是setJarByClass,现在是setJar,要写绝对路径,绝对路径从这里获取:
在这里插入图片描述

流量统计

数据准备

phone_data.txt

1	13736230513	192.196.100.1	www.atguigu.com	2481	24681	200
2	13846544121	192.196.100.2			264	0	200
3 	13956435636	192.196.100.3			132	1512	200
4 	13966251146	192.168.100.1			240	0	404
5 	18271575951	192.168.100.2	www.atguigu.com	1527	2106	200
6 	84188413	192.168.100.3	www.atguigu.com	4116	1432	200
7 	13590439668	192.168.100.4			1116	954	200
8 	15910133277	192.168.100.5	www.hao123.com	3156	2936	200
9 	13729199489	192.168.100.6			240	0	200
10 	13630577991	192.168.100.7	www.shouhu.com	6960	690	200
11 	15043685818	192.168.100.8	www.baidu.com	3659	3538	200
12 	15959002129	192.168.100.9	www.atguigu.com	1938	180	500
13 	13560439638	192.168.100.10			918	4938	200
14 	13470253144	192.168.100.11			180	180	200
15 	13682846555	192.168.100.12	www.qq.com	1938	2910	200
16 	13992314666	192.168.100.13	www.gaga.com	3008	3720	200
17 	13509468723	192.168.100.14	www.qinghua.com	7335	110349	404
18 	18390173782	192.168.100.15	www.sogou.com	9531	2412	200
19 	13975057813	192.168.100.16	www.baidu.com	11058	48243	200
20 	13768778790	192.168.100.17			120	120	200
21 	13568436656	192.168.100.18	www.alibaba.com	2481	24681	200
22 	13568436656	192.168.100.19			1116	954	200

FlowBean

让当前类的对象可以在Hadoop中序列化和反序列化

FlowBean这个类是一个JavaBean

Writable序列化步骤
1.自定义一个类(作为MR中的key或value)并实现Writable
2.实现write和readFields方法
3.在write方法中写序列化时要做的事情
在readFields方法中写反序列化时要做的事情
4.注意:反序列化时的顺序要和序列化时的顺序保持一致

package com.lxy.mr.exer.writable.mr01;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 7:26
 */
public class FLowBean implements Writable {

    private long upFlow;
    private long downFlow;
    private long sumFlow;

    public long getUpFlow() {
        return upFlow;
    }

    public void setUpFlow(long upFlow) {
        this.upFlow = upFlow;
    }

    public long getDownFlow() {
        return downFlow;
    }

    public void setDownFlow(long downFlow) {
        this.downFlow = downFlow;
    }

    public long getSumFlow() {
        return sumFlow;
    }

    public void setSumFlow(long sumFlow) {
        this.sumFlow = sumFlow;
    }

    public FLowBean() {
    }

    public FLowBean(long upFlow, long downFlow, long sumFlow) {
        this.upFlow = upFlow;
        this.downFlow = downFlow;
        this.sumFlow = sumFlow;
    }

    public FLowBean(long upFlow, long downFlow) {
        this.upFlow = upFlow;
        this.downFlow = downFlow;
        this.sumFlow = this.getUpFlow() + this.getDownFlow();
    }

    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeLong(downFlow);
        dataOutput.writeLong(upFlow);
        dataOutput.writeLong(sumFlow);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        downFlow = dataInput.readLong();
        upFlow = dataInput.readLong();
        sumFlow = dataInput.readLong();
    }

    @Override
    public String toString() {
        return "FLowBean{" +
                "upFlow=" + upFlow +
                ", downFlow=" + downFlow +
                ", sumFlow=" + sumFlow +
                '}';
    }
}

Mapper

package com.lxy.mr.exer.writable.mr01;

import com.lxy.mr.writable.mr01.FlowBean;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 20:50
 */

public class FlowMapper extends Mapper<LongWritable, Text,Text, FlowBean> {

    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, FlowBean>.Context context) throws IOException, InterruptedException {
        //1.切割数据
        String[] info = value.toString().split("\t");

        //2.封装key和value (  key(13736230513)  value(2481,24681,2481+24681) )
        Text outKey = new Text();
        outKey.set(info[1]);

        FlowBean outValue = new FlowBean();
        outValue.setUpFlow(Long.parseLong(info[info.length - 3]));
        outValue.setDownFlow(Long.parseLong(info[info.length - 2]));
        outValue.setSumFlow(outValue.getUpFlow() + outValue.getDownFlow());

        //3.将key,value写出去
        context.write(outKey,outValue);
    }
}

Reducer

该类是在reduce阶段被ReduceTask调用 用来实现ReduceTask要实现的业务逻辑代码

Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
    第一组:
         KEYIN :读取的key的类型(map写出的key的类型)-在这是手机号的类型
         VALUEIN :读取的value的类型(map写出的value的类型)-在这是FlowBean的类型
    第二组:
         KEYOUT : 写出的key的类型-在这是手机号的类型
         VALUEOUT :写出的value的类型 - 在这是FlowBean的类型
package com.lxy.mr.exer.writable.mr01;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 20:50
 */
public class FlowReducer extends Reducer<Text, FLowBean,Text,FLowBean> {
    /**
     * 在reduce方法中用来实现需要在ReduceTask中实现的功能
     * reduce方法在被循环调用每调用一次传入一组数据
     * @param key 读取的key - 单词
     * @param values 放了所有的value - 单词的数量
     * @param context 上下文在这用来将key,value写出去
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<FLowBean> values, Reducer<Text, FLowBean, Text, FLowBean>.Context context) throws IOException, InterruptedException {
        long sumDownFlow = 0;
        long sumUpFlow = 0;
        for (FLowBean value : values) {
            sumUpFlow += value.getUpFlow();
            sumDownFlow += value.getDownFlow();
        }

        FLowBean outValue = new FLowBean(sumUpFlow, sumDownFlow);
        
        context.write(key,outValue);
    }
}

Driver

右键运行即可

package com.lxy.mr.exer.writable.mr01;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * Author: Liang_Xinyu
 * Date: 24/05/14
 * Time: 7:27
 */
public class FlowDriver{
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        //1.创建Job实例
        Job job = Job.getInstance(new Configuration());

        //2.给Job设置参数 -- 包含mapper和reducer类
        //2.1关联本Driver程序的jar---本地运行的不需要设置 在集群上运行必须设置
        job.setJarByClass(FlowDriver.class);

        //2.2设置Mapper和Reducer类
        job.setMapperClass(FlowMapper.class);
        job.setReducerClass(Reducer.class);

        //2.3设置Mapper输出的key,value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setOutputValueClass(FLowBean.class);

        //2.4设置最终输出的key,value的类型-在这是Reducer输出的key value的类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(FLowBean.class);

        //2.5设置输入和输出路径
        //设置输入路径--数据所在的路径
        FileInputFormat.setInputPaths(job,new Path("D:\\io\\input2"));

        //设置输出路径-运算的结果所放的路径-该路径一定不能存在否则报错
        FileOutputFormat.setOutputPath(job,new Path("D:\\io\\output2"));

        //3.提交Job
        job.waitForCompletion(true);
    }
}

结果

在这里插入图片描述

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

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

相关文章

【35分钟掌握金融风控策略26】定价策略

目录 定价策略 定价策略的开发、部署、监控和调优 定价策略开发 定价策略部署 定价策略监控 定价策略调优 定价策略 定价是对授信审批通过的客户给予合适利率的过程。如何定价、定价多少是由定价策略来决定的。定价策略的制订要遵循“收益覆盖风险”原则&#xff0c;对于…

【Viso画图】Viso导出与图形适配的pdf

step1:选中开发工具点击shapeSheet&#xff0c;选中页 step2&#xff1a;进入页面参数设置窗口&#xff0c;将下面框选的参数设为0,enter后保存 目前效果&#xff1a; step3:选中设计->大小&#xff0c;选择适应页面大小或者自己根据图片调整 目前效果&#xff1a; step4: 以…

C语言:指针(3)

1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; 本质是把字符串 hello bit. ⾸字符的地址放到了pstr中。上⾯代码的意思是把⼀个常量字符串的⾸字符 h 的地址存放到指针变量 pstr 中。 2. 数组指针变量 2.1 数组指针变量是什么&#xff1f; 答案…

嵌入式科普(16)c语言函数参数的传递方式

目录 一、概述 二、C函数参数 2.1 一张图讲清 2.2 按数据类型分类&#xff1a; 2.2.1 基本数据类型参数&#xff1a; 2.2.2 数组参数&#xff1a; 2.2.3 结构体参数&#xff1a; 2.2.4 指针参数&#xff1a; 2.2.5 函数指针参数&#xff1a; 2.3 按传递方式分类&…

嵌入式数据库概念和基本命令的使用

文章目录 前言一、sqlite数据库概念二、sqlite数据库命令分类和使用1.命令分类1. 系统命令&#xff1a;2. SQLite 命令&#xff1a; 2.系统命令的使用3.sqlite命令的使用 三、sqlite C语言函数的使用和编程方法总结 前言 本篇文章将为大家讲解嵌入式数据库的使用&#xff0c;嵌…

0510Goods的Maven项目

0510Goods的Maven项目包-CSDN博客 数据库字段 商品主页 修改页面 点击商品主页更改信息&#xff0c; 跳转到修改页面&#xff0c; 并保留初始信息。 商品类别最多选取三项&#xff0c;最少选取一项 添加界面 商品类别最多选取三项&#xff0c;最少选取一项

知乎广告推广投放流程以及价格?

知乎作为一个拥有庞大高质量用户群体的知识分享平台&#xff0c;成为了众多品牌不可忽视的广告投放渠道。知乎不仅汇聚了各行各业的专业人士&#xff0c;其独特的社区氛围也为品牌提供了精准触达目标受众的机会。知乎广告推广的投放流程、费用标准&#xff0c;云衔科技提供的专…

如何使用恢复模式修复Mac启动问题?这里提供详细步骤

如果你的Mac无法启动,不要惊慌,Mac有一个隐藏的恢复模式,你可以使用它来诊断和修复任何问题,或者在需要时完全重新安装macOS。以下是如何使用它。 如何在Mac上启动到恢复模式 你需要做的第一件事是启动到恢复模式。尽管操作说明会因你使用的Mac电脑而异,但幸运的是,启动…

15-ps命令

常用选项 aux axjf a&#xff1a;显示一个终端所有的进程u&#xff1a;显示进程的归属用户及内存使用情况x&#xff1a;显示没有关联控制终端j&#xff1a;显示进程归属的进程组idf&#xff1a;以ASCII码的形式显示出进程的层次关系 ps aux其中| more是只显示一部分内容&…

RT-DETR改进教程|加入SCNet中的SCConv[CVPR2020]自校准卷积模块!

⭐⭐ RT-DETR改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ⭐⭐ 一、 论文介绍 论文链接&#xff1a;http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf 代码链接&#xff1a;https://gitcode.com/MCG-NKU/SCNet/ 文章摘要&#xff1a; CNN的最新进展主要致力于设计更…

一个完美的自动化测试框架应该怎么写?

一、什么是自动化测试框架&#xff1f; 自动化测试框架是为自动化测试用例或者脚本提供执行环境而搭建的基础设施。自动化测试框架有助于有效地开发、执行和报告自动化测试用例。 优点&#xff1a; 代码复用 提高测试效率 更高的测试覆盖率 维护成本低 更早发现和记录bug …

八年前端开发之路中遇到的一些实用技巧分享——代码思路及通用场景

在开发中比较有用的代码思路 1. 链式编程2. 高阶函数应用-(添加数据并提供删除方法)3. 利用Promise链切入&#xff08;延迟执行&#xff09;4. 通过中间层来解决问题&#xff08;装饰者模式&#xff09;5. 单例模式 1. 链式编程 所谓链式编程即是函数调用后返回对象本身 let …

LangChain 核心模块学习、Model I/O部分、llms代码介绍

LangChain 核心模块学习&#xff1a;Model I/O input 提示词 output 大模型输出的结果 Model I/O 是 LangChain 为开发者提供的一套面向 LLM 的标准化模型接口&#xff0c;包括模型输入&#xff08;Prompts&#xff09;、模型输出&#xff08;Output Parsers&#xff09;和模型…

Linux-线程

目录 1. 线程概念 2. 线程vs进程 3. 线程的优缺点 4. 线程创建 4.1 pthread_create 4.2 pthread_self 5. 线程终止 5.1 return 5.2 pthread_exit 5.3 pthread_cancel 6. 线程等待 7. 线程分离 1. 线程概念 线程&#xff1a;轻量级进程&#xff0c;在进程内部执行&a…

【Linux】自动化编译工具——make/makefile(超细图例详解!!)

目录 一、前言 二、make / Makefile背景介绍 &#x1f95d;Makefile是干什么的&#xff1f; &#x1f347;make又是什么&#xff1f; 三、demo实现【见见猪跑&#x1f416;】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子&#x1f468;】 3、深层理解【程序…

什么是Unreal Engine游戏引擎?它有什么优势?

大家好&#xff0c;我是咕噜土豆&#xff0c;很高兴又和大家见面了。在游戏开发行业中&#xff0c;选择合适的游戏引擎是非常重要的。其中&#xff0c;Unreal Engine作为一款功能强大的游戏引擎&#xff0c;在业界非常受欢迎。今天我带大家简单的了解一下。 什么是Unreal Engi…

python中的数据可视化:极坐标散点图

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化&#xff1a; 极坐标散点图 [太阳]选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np n 150 r 2 * np.r…

揭秘奇葩环境问题:IDEA与Maven版本兼容性解析

1.问题描述 最近在实现通过Java爬虫获取网页源码&#xff0c;然后紧接着将源码转换为图片上传到OSS服务器&#xff0c;其中探索了很多办法&#xff0c;但是在实现过程中遇到一个奇葩问题&#xff0c;就是我无论下载任何Maven依赖&#xff0c;都无法正常下载&#xff0c;简直是…

鸿蒙原生应用数量激增20倍,鸿蒙生态“一路狂奔”!

过去几个月&#xff0c;在各地政府和千行百业伙伴的全面支持下&#xff0c;鸿蒙生态建设正在以前所未有的速度和规模蓬勃发展。 鸿蒙生态跑出“加速度”&#xff0c;再迎里程碑进展 从1月华为宣布首批200多家应用厂商加速开发鸿蒙原生应用以来&#xff0c;到3月底已有超4000款…

DeepSort / Sort 区别

推荐两篇博文,详细介绍了deepsort的流程及代码大致讲解: https://blog.csdn.net/qq_48764574/article/details/138816891 https://zhuanlan.zhihu.com/p/196622890 DeepSort与Sort区别: 1、Sort 算法利用卡尔曼滤波算法预测检测框在下一帧的状态,将该状态与下一帧的检测结…