Hadoop MapReduce 处理2表join编程案例

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

假设文件1(表1)结构(hdfs文件名:t_user.txt):

1 wangming 男 计算机

2 hanmei 男 机械

3 lilei 女 法学

4 hanmeixiu 女 通信

5 chenyangxiu 男 设计

6 yangxiuping 男 英语

文件2(表2)结构(hdfs文件名:t_user_card.txt):

1 wangming 360781100207230023

2 hanmei 362781100207300033

3 lilei 36201100207100033

4 hanmeixiu 362202199697652519

5 chenyangxiu 363654678906542785

6 yangxiuping 360876187618971008

7 machao 370875468820186543

现在使用mapreduce使得表1和表2用姓名进行join,使得用户身份证号也展示出来

简述思路:

编程思路:

* 在map阶段会分别读取filePath = /xxx/xxx/t_user.txt的文件和

* filePath = /xxx/xxx/t_user_card.txt的文件, 读取2个不同文件会有不同的filePath

* 先把joinbean定义好, 读取不同的文件的时候,set进对应的属性值

* 然后把连接字段作为map阶段的key输出

* 使得JoinBean在Reduce阶段自动聚合成Iterable<JoinBean>

代码如下:

package com.chenjun.MRstudy.join;

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

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class MrJoinTest extends Configured implements Tool {

	/**
	 * 编程思路:
	 * 在map阶段会分别读取filePath = /xxx/xxx/t_user.txt的文件和
	 * filePath = /xxx/xxx/t_user_card.txt的文件, 读取2个不同文件会有不同的filePath
	 * 先把joinbean定义好, 读取不同的文件的时候,set进对应的属性值
	 * 然后把连接字段作为map阶段的key输出
	 * 使得JoinBean在Reduce阶段自动聚合成Iterable<JoinBean>
	 * @author CJ
	 */
	public static class MyMapper extends Mapper<LongWritable, Text, Text, JoinBean> {

		String tableFlag = "";

		@Override
		public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
			FileSplit fileSplit = (FileSplit) context.getInputSplit();
			// 获取输入文件的路径
			String filePath = fileSplit.getPath().toString();
			System.out.println("filePath======================"+filePath);
			
			Text textKey = new Text();
			JoinBean joinBean = new JoinBean();
			// 根据输入路径名判断读取的是哪个表
			if (filePath.substring(filePath.lastIndexOf('/') + 1, filePath.length()).equals("t_user.txt")) {
				tableFlag = "t_user.txt";
			} else if (filePath.substring(filePath.lastIndexOf('/') + 1, filePath.length()).equals("t_user_card.txt")) {
				tableFlag = "t_user_card.txt";
			} else {
				return;
			}
			// 根据不同的表名,把join字段作为输出的key,发送给reduce端
			String line = value.toString();
			String[] lineArray = line.split(" ");
			if ("t_user.txt".equals(tableFlag)) {
				String userid = lineArray[0];
				String userName = lineArray[1];
				String userSex = lineArray[2];
				String profession = lineArray[3];
				textKey.set(userName);
				joinBean.setUserId(userid);
				joinBean.setUserName(userName);
				joinBean.setUserSex(userSex);
				joinBean.setProfession(profession);
			} else if ("t_user_card.txt".equals(tableFlag)) {
				String userName = lineArray[1];
				String idNumber = lineArray[2];
				textKey.set(userName);
				joinBean.setIdNumber(idNumber);
				joinBean.setUserName(userName);
			} else {
				return;
			}
			System.out.println("textKey=" + textKey + "   " + "joinBean=" + joinBean.toString());
			// 发送给reduce端
			context.write(textKey, joinBean);
		}
	}

	public static class MyReducer extends Reducer<Text, JoinBean, NullWritable, Text> {
		@Override
		public void reduce(Text key, Iterable<JoinBean> values, Context context) throws IOException, InterruptedException {
			JoinBean joinBean = new JoinBean();
			for (JoinBean bean : values) {
				if (StringUtils.isNotBlank(bean.getUserId())) {
					joinBean.setUserId(bean.getUserId());
				}
				if (StringUtils.isNotBlank(bean.getUserName())) {
					joinBean.setUserName(bean.getUserName());
				}
				if (StringUtils.isNotBlank(bean.getUserSex())) {
					joinBean.setUserSex(bean.getUserSex());
				}
				if (StringUtils.isNotBlank(bean.getProfession())) {
					joinBean.setProfession(bean.getProfession());
				}
				if (StringUtils.isNotBlank(bean.getIdNumber())) {
					joinBean.setIdNumber(bean.getIdNumber());
				}
			}
			Text text = new Text(joinBean.getUserId() + " " + joinBean.getUserName() + " " + joinBean.getUserSex() + " " + joinBean.getProfession() + " "
					+ joinBean.getIdNumber());
			context.write(NullWritable.get(), text);
		}
	}

	public int run(String[] allArgs) throws Exception {
		Job job = Job.getInstance(getConf());
		job.setJarByClass(MrJoinTest.class);
		job.setOutputKeyClass(NullWritable.class);
		job.setOutputValueClass(Text.class);

		job.setMapperClass(MyMapper.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(JoinBean.class);

		job.setReducerClass(MyReducer.class);
		job.setNumReduceTasks(1);

		job.setInputFormatClass(TextInputFormat.class);
		job.setOutputFormatClass(TextOutputFormat.class);

		String[] args = new GenericOptionsParser(getConf(), allArgs).getRemainingArgs();

		FileInputFormat.addInputPaths(job, "/mrtest/joinInput/t_user.txt,/mrtest/joinInput/t_user_card.txt");

		FileOutputFormat.setOutputPath(job, new Path("/mrtest/joinOutput"));

		return job.waitForCompletion(true) ? 0 : 1;
	}

	public static void main(String[] args) throws Exception {
		Configuration configuration = new Configuration();
		ToolRunner.run(configuration, new MrJoinTest(), args);
	}

}

class JoinBean implements Writable {
	private String userId = "";
	private String userName = "";
	private String userSex = "";
	private String profession = "";
	private String IdNumber = "";

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserSex() {
		return userSex;
	}

	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}

	public String getProfession() {
		return profession;
	}

	public void setProfession(String profession) {
		this.profession = profession;
	}

	public String getIdNumber() {
		return IdNumber;
	}

	public void setIdNumber(String idNumber) {
		IdNumber = idNumber;
	}

	@Override
	public void write(DataOutput out) throws IOException {
		out.writeUTF(this.userId);
		out.writeUTF(this.userName);
		out.writeUTF(this.userSex);
		out.writeUTF(this.profession);
		out.writeUTF(this.IdNumber);
	}

	@Override
	public void readFields(DataInput in) throws IOException {
		this.userId = in.readUTF();
		this.userName = in.readUTF();
		this.userSex = in.readUTF();
		this.profession = in.readUTF();
		this.IdNumber = in.readUTF();
	}

	@Override
	public String toString() {
		return "JoinBean [userId=" + userId + ", userName=" + userName + ", userSex=" + userSex + ", profession=" + profession + ", IdNumber=" + IdNumber + "]";
	}

}

_____________________________________________________________________________________________

编程过程中遇到的错误:

错误1:

hadoop jar MRstudy-1.0.jar com.chenjun.MRstudy.join.MrJoinTest 
18/03/15 16:35:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/03/15 16:35:08 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
18/03/15 16:35:08 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
18/03/15 16:35:09 INFO input.FileInputFormat: Total input paths to process : 1
18/03/15 16:35:09 INFO mapreduce.JobSubmitter: number of splits:1
18/03/15 16:35:09 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local2133625459_0001
18/03/15 16:35:09 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
18/03/15 16:35:09 INFO mapred.LocalJobRunner: OutputCommitter set in config null
18/03/15 16:35:09 INFO mapreduce.Job: Running job: job_local2133625459_0001
18/03/15 16:35:09 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
18/03/15 16:35:09 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
18/03/15 16:35:09 INFO mapred.LocalJobRunner: Waiting for map tasks
18/03/15 16:35:09 INFO mapred.LocalJobRunner: Starting task: attempt_local2133625459_0001_m_000000_0
18/03/15 16:35:09 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
18/03/15 16:35:09 INFO util.ProcfsBasedProcessTree: ProcfsBasedProcessTree currently is supported only on Linux.
18/03/15 16:35:09 INFO mapred.Task:  Using ResourceCalculatorProcessTree : null
18/03/15 16:35:09 INFO mapred.MapTask: Processing split: hdfs://localhost:8000/mrtest/joinInput/t_user.txt:0+137
18/03/15 16:35:09 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
18/03/15 16:35:09 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
18/03/15 16:35:09 INFO mapred.MapTask: soft limit at 83886080
18/03/15 16:35:09 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
18/03/15 16:35:09 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
18/03/15 16:35:09 WARN mapred.MapTask: Unable to initialize MapOutputCollector org.apache.hadoop.mapred.MapTask$MapOutputBuffer
java.lang.NullPointerException
	at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1011)
	at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)
	at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
	at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
	at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
18/03/15 16:35:09 INFO mapred.LocalJobRunner: map task executor complete.
18/03/15 16:35:09 WARN mapred.LocalJobRunner: job_local2133625459_0001
java.lang.Exception: java.io.IOException: Initialization of all the collectors failed. Error in last collector was :null
	at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
	at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.io.IOException: Initialization of all the collectors failed. Error in last collector was :null
	at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:415)
	at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
	at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
	at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1011)
	at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)
	... 10 more
18/03/15 16:35:10 INFO mapreduce.Job: Job job_local2133625459_0001 running in uber mode : false
18/03/15 16:35:10 INFO mapreduce.Job:  map 0% reduce 0%
18/03/15 16:35:10 INFO mapreduce.Job: Job job_local2133625459_0001 failed with state FAILED due to: NA
18/03/15 16:35:10 INFO mapreduce.Job: Counters: 0

这个错误百度了很久 ,到后面发现其实原因是JoinBean没有实现Writable接口导致的

_____________________________________________________________________________________________

错误2:

java.lang.Exception: java.lang.NullPointerException
	at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
	at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NullPointerException
	at java.io.DataOutputStream.writeUTF(DataOutputStream.java:347)
	at java.io.DataOutputStream.writeUTF(DataOutputStream.java:323)
	at com.chenjun.MRstudy.join.JoinBean.write(MrJoinTest.java:199)
	at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:98)
	at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:82)
	at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1157)
	at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:715)
	at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
	at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
	at com.chenjun.MRstudy.join.MrJoinTest$MyMapper.map(MrJoinTest.java:76)
	at com.chenjun.MRstudy.join.MrJoinTest$MyMapper.map(MrJoinTest.java:29)
	at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
	at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

 

这个原因是因为write()和readFields()方法报出了空指针,

解决办法:

在private String xxx 后面加入初始化赋值

 

最后运行结果:

________________________________________________________________________________

5 chenyangxiu 男 设计 363654678906542785

2 hanmei 男 机械 362781100207300033

4 hanmeixiu 女 通信 362202199697652519

3 lilei 女 法学 36201100207100033

machao 370875468820186543

1 wangming 男 计算机 360781100207100033

6 yangxiuping 男 英语 360876187618971008

 

 

 

转载于:https://my.oschina.net/u/2338224/blog/1635735

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop MapReduce 处理2表join编程案例 的相关文章

  • xargs

    功能说明 xff1a 向其他命令传递命令行参数的一个过滤器 xff0c 能够将管道或者标准输入传递的数据转换成xargs命令后跟随的命令的命令行参数 选项说明 xff1a n 指定每行的最大参数量 xff0c 可以将标准输入的文本划分为多行
  • TWEEN动画、JQUERY、ES6 — 2、轮播图-渐隐渐现版本

    分析 目录 编译并压缩less xff08 需要先npm安装less xff09 banner html lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 span cl
  • TypeScript【Webpack 打包过】 编译过的代码怎么对源码调试?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 变换都可以通过 sourcemap 恢复 如果用的 Angular CLI xff0c 那么 ng serve 默认就提供完整的 sourcemap xff0c 直接点鼠标
  • mate桌面用户 root 自动登录lightdm.conf -20190520 方法【fedora 21】mate

    桌面用户自动登录lightdm conf 20190520 方法 修改 etc lightdm lightdm conf 步骤 xff1a 1 vim etc lightdm lightdm conf 解除注释 autologin user
  • pip 删除cache_删除〜/ .cache / pip目录是否安全?

    I have limited space on my server and I am thinking to delete the cache of the PIP I am not sure if its safe to delete o
  • 离线快速部署Mirantis Openstack 9.0

    Mirantis Openstack 9 0 简称为MOS 9 0 它 是 Mirantis 公司开发 openstack 自动化安装工具 xff0c 这个工具还有个专门的名字 xff0c 叫做 Fuel 离线安装时不需要更新Ubuntu和
  • 浅析人脸检测之Haar分类器方法

    补充 这是我时隔差不多两年后 回来编辑这篇文章加的这段补充 说实话看到这么多评论很是惊讶 有很多评论不是我不想回复 真的是时间久了 很多细节我都忘记了 无力回复 非常抱歉 我本人并非做CV的 这两年也都没有再接触CV 作为一个本科毕业的苦逼
  • Debian下如何进入图形界面

    在进行基本安装之后 xff0c 如果没有选择图形界面的话 xff0c 是不会进入图形界面的 xff0c 如果想要进入图形界面就必须要安装x window系统 xff0c 如果没有该系统就更别谈什么KDE和 GNOME了 xff0c 因为它们
  • RHEL5.5部署iscsi连接,开机自动启动

    最近要部署linux服务器连接iscsi服务器 xff0c 挂载iscsi盘 xff0c 记录下操作步骤 iscsi target是EMC的低端存储 xff0c IP xff1a 192 168 10 59 iscsi initiator安
  • ONIE

    http www onie org https github com opencomputeproject onie
  • 首篇!最全的全景分割综述(RGB图像/医学图像/LiDAR)

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 分割 技术交流群 后台回复 分割综述 获取语义分割 实例分割 全景分割 弱监督分割等超全学习资料 xff01 摘要 用于视
  • 记录com.google.code.maven-replacer-plugin找不到文件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一直猜想是打包阶段的问题 xff0c 找了好久找到这个 xff1a https blog gkishorapps rhcloud com 2014 05 removing
  • 解决vnc灰屏,黑屏,鼠标大黑叉情况

    解决 linux 上 VNC 安装好后登录出现黑屏 灰屏 鼠标是大黑叉情况 安装系统支持包组 服务器 xff08 Centos rhel xff09 在安装字符界面操作系统时默认是不会安装相关图形包组的 yumgroupinstall 34
  • Incorrect datetime value

    今天在开发库上给一个表添加字段时候 xff0c 发现居然报错 root 64 DB 06 14 42 gt ALTER TABLE 96 DB 96 96 user 96 ADD COLUMN 96 status mode 96 TINYI
  • 5个最佳免费Linux杀毒软件

    Linux的防病毒软件 xff0c 开玩笑吧 xff1f Linux不是很安全吗 xff1f 很多Linux新手都这样认为 xff0c 看到标题不要犹豫 xff0c 读完全文你就会从中找到答案 首先 xff0c Linux比其它操作系统更稳
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程

    Mac 鼠须管 Rime 输入法 安装五笔输入法 教程 相关链接 极点五笔方案 github xff1a https github com KyleBing r RIME 官网 xff1a https rime im RIME github
  • MapReduce实现与自定义词典文件基于hanLP的中文分词详解

    前言 xff1a 文本分类任务的第 1步 xff0c 就是对语料进行分词 在单机模式下 xff0c 可以选择python jieba分词 xff0c 使用起来较方便 但是如果希望在Hadoop集群上通过mapreduce程序来进行分词 xf
  • 单点登录-CAS登录流程

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 第1 2两个章节摘抄自http www cnblogs com lihuidu p 6495247 html xff0c 第3部分来源于CAS官网 1 从项目部署结构说起
  • Hadoop集群(第5期)_Hadoop安装配置

    1 集群部署介绍 1 1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台 以Hadoop分布式文件系统 xff08 HDFS xff0c Hadoop Distributed Filesystem xff
  • 服务器系统没有界面,云服务器没有图形界面

    云服务器没有图形界面 内容精选 换一换 使用鲲鹏弹性云服务器 没有图形界面 操作某些文件的时候 你一定需要一个好用的编辑器 那么神器vim就得必须说说啦 超级好用先看图 vim有很多快捷操作 但是对于新人来说 仅仅用于日常修改文件部分信息

随机推荐

  • ERROR 1129 (HY000): Host '192.168.7.210' is blocked because of many connection errors; unblock with ...

    一 问题现象 mysql远程连接报错 ERROR 1129 HY000 Host 39 192 168 7 210 39 is blocked because of many connection errors unblock with 3
  • 大裕量Softmax 损失函数--Large-Margin Softmax Loss for Convolutional Neural Networks

    ICML2016 Large Margin Softmax Loss for Convolutional Neural Networks 本文针对CNN网络中的 Softmax Loss 做出改进 xff0c 使之成为 Large Marg
  • Deep Learning 学习笔记(一)——softmax Regression

    Deep Learning 学习笔记 xff08 一 xff09 softmax Regression 茫然中不知道该做什么 xff0c 更看不到希望 偶然看到coursera上有Andrew Ng教授的机器学习课程以及他UFLDL上的深度
  • Debian 从稳定版升级到测试版

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 关于Debian 的发行版本 Debian 一直维护着至少三个发行版 稳定版 stable xff0c 测试版 testing 和 不稳定版 unstable 稳定版
  • VS2010中的调试技巧

    今天的博文将介绍Visual Studio中的一些实用调试技巧 这是受我朋友Scott Cate 他发表过几十篇很棒的VS技术文章 启发 他最近告诉我 xff0c 许多Visual Studio下的程序员 xff0c 甚至一些很有经验的开发
  • 把mysql的数据导出成txt

    把mysql的数据导出成txt select a from b into outfile 39 sqlfile a txt 39 my ini里需要设置secure file priv 61 d sqlfile linux中是 etc my
  • 理解神经网络:从神经元到RNN、CNN、深度学习

    本文为 AI 研习社编译的技术博客 xff0c 原标题 xff1a Understanding Neural Networks From neuron to RNN CNN and Deep Learning 作者 vibhor nigam
  • debian 系统版本 划分、识别、演进 的释疑(升级系统须知)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt debian 系统版本 划分 识别 演进 的释疑 xff08 升级系统须知 xff09 http my oschina net emptytimespace blog 84
  • vnc远程不能登录,总是提示认证错误解决

    vnc无法登陆 xff0c 总是提示验证错误 34 An authentication error occurred See the server error log for details 34 then the server will
  • JavaScript 二进制转文件

    关于在javascript下 xff0c 如何将二进制转换成相应的文件并下载 首先 xff0c 我们需要得到二进制的数据以及相应的文件格式 xff0c 没有相应的格式也可以 xff0c 可以通过二进制来判断 xff0c 但相对会麻烦很多 x
  • 子网数、主机数与子网掩码的关系

    直接拿实际的例子说吧 xff0c 这样容易理解 1 利用子网数目计算子网掩码 把B类地址172 16 0 0划分成30个子网络 xff0c 它的子网掩码是多少 xff1f 将子网络数目30转换成二进制表示11110 统计一下这个二进制的数共
  • 人脸识别“SphereFace: Deep Hypersphere Embedding for Face Recognition”

    在开放集中进行人脸识别 xff0c 理想的特征最大的类内差距应小于最小的类间差距 作者提出了angular softmax xff08 A Softmax xff09 损失函数学习angularly discriminative featu
  • 私有云拥有哪些好处?

    更高的安全性和隐私 虽然公共云服务提供了一定程度的安全性 xff0c 但是私有云是一个更安全的选择 这是通过使用不同的资源池实现的 xff0c 这些资源池的访问仅限于防火墙 专用租用线路和组织的现场内部托管 更多的控制 由于私有云只能由一个
  • 透视学如何成像

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 透视学如何成像 xff1f 这其中是有规律可循的 所谓 当局者迷 xff0c 旁观者清 我们自身无法去证实或者判断透视现象的规律 xff0c 因为我们的视觉已经适应这种变化
  • win10 64位JLink v8固件丢失修复总结

    大早晨的调着调着程序 xff0c 视线没离开一会 xff0c 就发现jlink自动断开连接了 xff0c 然后重新拔插jlink 重启都不行 xff0c 才发现小灯已经不亮了 xff0c 原来是固件损坏了 xff0c 果断想办法修复这位大爷
  • STP/RSTP/MSTP的分析与对比

    一 xff0e 生成树相关的几个概念STP RSTP MSTP STP xff1a IEEE Std 802 1D 1998定义 xff0c 不能快速迁移 即使是在点对点链路或边缘端口 xff0c 也必须等待2倍的forward delay
  • 运维工程师的职责和前景

    运维工程师的职责和前景 运维中关键技术点解剖 xff1a 1 大量高并发网站的设计方案 xff1b 2 高可靠 高可伸缩性网络架构设计 xff1b 3 网站安全问题 xff0c 如何避免被黑 xff1f 4 南北互联问题 动态CDN解决方案
  • Snipaste强大离线/在线截屏软件的下载、安装和使用

    步骤一 https zh snipaste com xff0c 去此官网下载 步骤二 xff1a 由于此是个绿色软件 xff0c 直接解压即可 步骤三 使用 xff0c 见官网 ttps zh snipaste com 按F1开始截屏 感谢
  • SQL分页查询总结{转}

    开发过程中经常遇到分页的需求 xff0c 今天在此总结一下吧 简单说来方法有两种 xff0c 一种在源上控制 xff0c 一种在端上控制 源上控制把分页逻辑放在SQL层 xff1b 端上控制一次性获取所有数据 xff0c 把分页逻辑放在UI
  • Hadoop MapReduce 处理2表join编程案例

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 假设文件1 表1 结构 hdfs文件名 t user txt 1 wangming 男 计算机 2 hanmei 男 机械 3 lilei 女 法学 4 hanmeixiu