当前位置: 首页 > news >正文

使用Flink-JDBC将数据同步到Doris

在现代数据分析和处理环境中,数据同步是一个至关重要的环节。Apache Flink和Doris是两个强大的工具,分别用于实时数据处理和大规模并行处理(MPP)SQL数据库。本文将介绍如何使用Flink-JDBC连接器将数据同步到Doris。

一、背景介绍

1、Apache Flink:Flink是一个开源流处理框架,用于处理无界和有界数据流。它提供了高吞吐量、低延迟的数据处理能力,并支持复杂的状态管理和容错机制。

2、Doris:Doris(原百度Palo)是一个基于MPP架构的高性能、实时分析型数据库。它支持高并发查询和高吞吐量的复杂分析场景,具有亚秒级响应时间,并兼容MySQL协议。

3、JDBC:Java数据库连接(JDBC)是一种Java API,用于连接和操作数据库。Flink提供了JDBC连接器,允许从各种关系型数据库中读取和写入数据。

二、准备工作

1、安装Flink:确保你的环境中已经安装了Apache Flink。本文示例使用的是Flink 1.20.0版本。

2、安装Doris:确保你的环境中已经安装并配置了Doris。

3、准备相关测试数据集(excel)。

4、依赖库:使用flink-connector-jdbc和Doris的JDBC驱动。如果你使用的是Maven,可以在项目的pom.xml文件中添加以下依赖:

<dependencies><!--    flink--><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-base</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-kafka</artifactId><version>${flink-kafka.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-jdbc --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>${flink-jdbc.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-files --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-files</artifactId><version>${flink.version}</version></dependency><!-- flink-doris-connector --><dependency><groupId>org.apache.doris</groupId><artifactId>flink-doris-connector-1.16</artifactId><version>${flink-doris.version}</version></dependency><!--    json处理--><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.53</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.24.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency>
</dependencies>

三、实现步骤

1.读取并解析excel中的测试数据集

package org.example.day20250105;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import org.example.day20250105.domain.*;
import org.example.day20250105.flink.jdbc.OdsXwDetailDataWriteByFlink;import java.util.ArrayList;
import java.util.List;public class ExcelDataHandle {private static final String filePath = "src/main/resources/20250105/WW2216069019-循环-90-3-1-20230104110446.xlsx";/*** 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 1000;/*** 缓存的数据*/private static List<OdsXwCycleData> odsXwCycleDataList = new ArrayList<>(BATCH_COUNT);private static List<OdsXwDetailData> odsXwDetailDataList = new ArrayList<>(BATCH_COUNT);private static List<OdsXwStepData> odsXwStepDataList = new ArrayList<>(BATCH_COUNT);private static List<OdsTestFlow> odsTestFlowList = new ArrayList<>(BATCH_COUNT);private static final OdsTestFlow finalFlow = new OdsTestFlow();public static void main(String[] args) {EasyExcel.read(filePath, OdsTestFlowDataFormat.class, new OdsTestFlowDataHandle()).sheet(1).doRead();System.out.println(odsTestFlowList.add(finalFlow));System.out.println(odsTestFlowList);}public static List<OdsXwCycleData> readCycleData() {EasyExcel.read(filePath, OdsXwCycleData.class, new OdsXwCycleDataHandle()).sheet(2).doRead();return odsXwCycleDataList;}public static List<OdsTestFlow> readTestFlowData(){EasyExcel.read(filePath, OdsTestFlowDataFormat.class, new OdsTestFlowDataHandle()).sheet(1).doRead();return odsTestFlowList;}public static List<OdsXwStepData> readStepData() {EasyExcel.read(filePath, OdsXwStepData.class, new OdsXwStepDataHandle()).excelType(ExcelTypeEnum.XLSX).sheet(3).doRead();return odsXwStepDataList;}public static List<OdsXwDetailData> readDetailData() {EasyExcel.read(filePath, OdsXwDetailData.class, new OdsXwDetailDataHandle()).sheet(4).doRead();return odsXwDetailDataList;}/*** 新威原始测试流程数据   sheet 1*/public static class OdsTestFlowDataHandle implements ReadListener<OdsTestFlowDataFormat> {private static int rowCount = 0;@Overridepublic void invoke(OdsTestFlowDataFormat format, AnalysisContext analysisContext) {if (rowCount > 5) {return;}if (rowCount == 0) {finalFlow.setStartStepNo(format.getV1());finalFlow.setVoltageUpperLimit(format.getV2());finalFlow.setBatteryBatchNumber(format.getV3());} else if (rowCount == 1) {finalFlow.setCycleTimes(format.getV1());finalFlow.setVoltageLowerLimit(format.getV2());finalFlow.setCreator(format.getV3());} else if (rowCount == 2) {finalFlow.setRecordCondition(format.getV1());finalFlow.setCurrentUpperLimit(format.getV2());finalFlow.setRemark(format.getV3());} else if (rowCount == 3) {finalFlow.setVoltageRange(format.getV1());finalFlow.setCurrentLowerLimit(format.getV2());} else if (rowCount == 4) {finalFlow.setCurrentRange(format.getV1());finalFlow.setStartDatetime(format.getV2());finalFlow.setTestBarcode(format.getV3());} else if (rowCount == 5) {finalFlow.setActiveSubstances(format.getV1());finalFlow.setNominalCapacity(format.getV2());}rowCount++;}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {odsTestFlowList.add(finalFlow);}}/*** 循环数据处理   sheet 2*/public static class OdsXwCycleDataHandle implements ReadListener<OdsXwCycleData> {@Overridepublic void invoke(OdsXwCycleData odsXwCycleData, AnalysisContext analysisContext) {odsXwCycleDataList.add(odsXwCycleData);
//            if (odsXwCycleDataList.size() >= BATCH_COUNT) {
//                // 存储完成清理 list
//                odsXwCycleDataList.clear();
//            }}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}}/*** 新威原始详情数据 sheet 4*/public static class OdsXwDetailDataHandle implements ReadListener<OdsXwDetailData> {@Overridepublic void invoke(OdsXwDetailData odsXwDetailData, AnalysisContext analysisContext) {odsXwDetailDataList.add(odsXwDetailData);if (odsXwDetailDataList.size() >= BATCH_COUNT) {//每1000条去调用存储方法一次OdsXwDetailDataWriteByFlink.save(odsXwDetailDataList);// 存储完成清理 listodsXwDetailDataList.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}}/*** 新威原始工步数据 sheet 3*/public static class OdsXwStepDataHandle implements ReadListener<OdsXwStepData> {@Overridepublic void invoke(OdsXwStepData odsXwStepData, AnalysisContext analysisContext) {odsXwStepDataList.add(odsXwStepData);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}}
}

2.通过filnk-jdbc写入到doris中

package org.example.day20250105.flink;public interface DorisConstant {public static final String FE_NODE_URL = "192.168.12.244:18030";String BE_NODE_URL = "192.168.12.244:18030";String DORIS_JDBC_URL = "jdbc:mysql://192.168.12.244:19030/test_db_czq";String USERNAME = "root";String PASSWORD = "*******";String DB_NAMME = "test_db_czq";String DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";
}package org.example.day20250105.flink.jdbc;import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.example.day20250105.ExcelDataHandle;
import org.example.day20250105.flink.DorisConstant;/*** INSERT INTO `test_db_czq`.`ods_xw_step_data` (`cycle_id`, `step_id`, `step_no`, `step_type`, `step_time`, `start_absolute_time`, `end_absolute_time`, `capacity`, `specific_capacity`, `charge_capacity`, `charge_specific_capacity`, `discharge_capacity`, `discharge_specific_capacity`, `net_discharge_capacity`, `energy`, `specific_energy`, `charge_energy`, `charge_specific_energy`, `discharge_energy`, `discharge_specific_energy`, `net_discharge_energy`, `super_capacitor`, `initial_voltage`, `charge_initial_voltage`, `discharge_initial_voltage`, `end_voltage`, `charge_end_voltage`, `discharge_end_voltage`, `charge_median_voltage`, `discharge_median_voltage`, `initial_current`, `end_current`, `dcir`, `t1_start_temperature`, `t1_end_temperature`, `t1_max_temperature`, `t1_min_temperature`, `v1_start_voltage`, `v1_end_voltage`, `v1_max_voltage`, `v1_min_voltage`, `file_name`) VALUES ('5', '30', '45', '恒流放电', '02:00:19', '2023-01-03 03:47:37', '2023-01-03 05:47:56', '4.0266', '4026648', '0', '0', '4.0266', '4026648', '4.0266', '12.858', '12857977.78', '0', '0', '12.858', '12857977.78', '12.858', '10407.4004', '3.4573', '0', '3.4573', '1.9993', '0', '1.9993', '0', '3.2285', '0', '-2.0089', '0', '25.3', '25.5', '25.6', '25.2', '-0.0003', '-0.0003', '-0.0001', '-0.0003', NULL);*/
public class OdsXwStepDataWriteByFlink {public static void main(String[] args) throws Exception {final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);env.fromData(ExcelDataHandle.readStepData()).addSink(JdbcSink.sink("INSERT INTO `test_db_czq`.`ods_xw_step_data` " +"(`cycle_id`, `step_id`, `step_no`, `step_type`, `step_time`, `start_absolute_time`, " +"`end_absolute_time`, `capacity`, `specific_capacity`, `charge_capacity`, `charge_specific_capacity`," +" `discharge_capacity`, `discharge_specific_capacity`, `net_discharge_capacity`, `energy`, `specific_energy`, " +"`charge_energy`, `charge_specific_energy`, `discharge_energy`, `discharge_specific_energy`, `net_discharge_energy`, " +"`super_capacitor`, `initial_voltage`, `charge_initial_voltage`, `discharge_initial_voltage`, `end_voltage`, `charge_end_voltage`," +" `discharge_end_voltage`, `charge_median_voltage`, `discharge_median_voltage`, `initial_current`, `end_current`, `dcir`, " +"`t1_start_temperature`, `t1_end_temperature`, `t1_max_temperature`, `t1_min_temperature`, `v1_start_voltage`, `v1_end_voltage`, " +"`v1_max_voltage`, `v1_min_voltage`, `file_name`) " +"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",(ps, data) -> {ps.setString(1, data.getCycle_id());ps.setString(2, data.getStep_id());ps.setString(3, data.getStep_no());ps.setString(4, data.getStep_type());ps.setString(5, data.getStep_time());ps.setString(6, data.getStart_absolute_time());ps.setString(7, data.getEnd_absolute_time());ps.setString(8, data.getCapacity());ps.setString(9, data.getSpecific_capacity());ps.setString(10, data.getCharge_capacity());ps.setString(11, data.getCharge_specific_capacity());ps.setString(12, data.getDischarge_capacity());ps.setString(13, data.getDischarge_specific_capacity());ps.setString(14, data.getNet_discharge_capacity());ps.setString(15, data.getEnergy());ps.setString(16, data.getSpecific_energy());ps.setString(17, data.getCharge_energy());ps.setString(18, data.getCharge_specific_energy());ps.setString(19, data.getDischarge_energy());ps.setString(20, data.getDischarge_specific_energy());ps.setString(21, data.getNet_discharge_energy());ps.setString(22, data.getSuper_capacitor());ps.setString(23, data.getInitial_voltage());ps.setString(24, data.getCharge_initial_voltage());ps.setString(25, data.getDischarge_initial_voltage());ps.setString(26, data.getEnd_voltage());ps.setString(27, data.getCharge_end_voltage());ps.setString(28, data.getDischarge_end_voltage());ps.setString(29, data.getCharge_median_voltage());ps.setString(30, data.getDischarge_median_voltage());ps.setString(31, data.getInitial_current());ps.setString(32, data.getEnd_current());ps.setString(33, data.getDcir());ps.setString(34, data.getT1_start_temperature());ps.setString(35, data.getT1_end_temperature());ps.setString(36, data.getT1_max_temperature());ps.setString(37, data.getT1_min_temperature());ps.setString(38, data.getV1_start_voltage());ps.setString(39, data.getV1_end_voltage());ps.setString(40, data.getV1_max_voltage());ps.setString(41, data.getV1_min_voltage());ps.setString(42, data.getFile_name());},new JdbcConnectionOptions.JdbcConnectionOptionsBuilder().withUsername(DorisConstant.USERNAME).withPassword(DorisConstant.PASSWORD).withDriverName(DorisConstant.DRIVER_CLASS_NAME).withUrl(DorisConstant.DORIS_JDBC_URL).build()));env.execute();}
}
 

四、实现结果

登录Doris后台可以看到数据已经同步到了ods_xw_step_data表中

图片

相关文章:

使用Flink-JDBC将数据同步到Doris

在现代数据分析和处理环境中&#xff0c;数据同步是一个至关重要的环节。Apache Flink和Doris是两个强大的工具&#xff0c;分别用于实时数据处理和大规模并行处理&#xff08;MPP&#xff09;SQL数据库。本文将介绍如何使用Flink-JDBC连接器将数据同步到Doris。 一、背景介绍…...

【深度学习】自编码器(Autoencoder, AE)

自编码器&#xff08;Autoencoder, AE&#xff09;是一种无监督学习模型&#xff0c;主要用于特征提取、数据降维、去噪和生成模型等任务。它的核心思想是通过将输入压缩到一个低维的潜在空间表示&#xff08;编码过程&#xff09;&#xff0c;然后再从这个潜在表示重构输入&am…...

跨专业毕业论文写作

跨专业毕业论文写作是一项具有挑战性的任务&#xff0c;但通过合理的规划和方法&#xff0c;你可以顺利完成这篇论文。以下是一些关键步骤和建议&#xff0c;帮助你撰写一篇高质量的跨专业毕业论文。 一、确定研究方向和课题 选择与本科专业相关或感兴趣的研究方向&#xff1a;…...

在 Go语言中一个字段可以包含多种类型的值的设计与接种解决方案

在 Go 中&#xff0c;如果你希望一个字段可以包含多种类型的值&#xff0c;你可以使用以下几种方式来实现&#xff1a; ### 1. **使用空接口 (interface{})** Go 的空接口 interface{} 可以接受任何类型的值&#xff0c;因此&#xff0c;你可以将字段定义为一个空接口&#x…...

为AI聊天工具添加一个知识系统 之32 三“中”全“会”:推理式的ISA(父类)和IOS(母本)以及生成式CMN (双亲委派)之1

本文要点和问题 要点 三“中”全“会”&#xff1a;推理式的ISA的&#xff08;父类-父类源码&#xff09;和IOS的&#xff08;母本-母类脚本&#xff09;以及生成式 CMN &#xff08;双亲委派-子类实例&#xff09;。 数据中台三端架构的中间端(信息系统架构ISA &#xff1a…...

手撕Transformer -- Day6 -- DecoderBlock

手撕Transformer – Day6 – DecoderBlock 目录 手撕Transformer -- Day6 -- DecoderBlockTransformer 网络结构图DecoderBlock 代码Part1 库函数Part2 实现一个解码器Block&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构图 Transformer 网络结构 DecoderBlock 代…...

Docker常用命令大全

Docker容器相关命令&#xff1a; 创建并启动容器&#xff1a; docker run&#xff1a;创建一个新的容器并运行一个命令。例如&#xff1a;docker run -d -p 8080:80 nginx这将后台(-d)运行一个Nginx容器&#xff0c;并映射宿主机的8080端口到容器的80端口。 列出容器&#x…...

【Linux探索学习】第二十五弹——动静态库:Linux 中静态库与动态库的详细解析

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 在 Linux 系统中&#xff0c;静态库和动态库是开发中常见的两种库文件类型。它们在编译、链接、内存管理以及程序的性能和可维护性方面有着…...

Vue 实现当前页面刷新的几种方法

以下是 Vue 中实现当前页面刷新的几种方法&#xff1a; 方法一&#xff1a;使用 $router.go(0) 方法 通过Vue Router进行重新导航&#xff0c;可以实现页面的局部刷新&#xff0c;而不丢失全局状态。具体实现方式有两种&#xff1a; 实现代码&#xff1a; <template&g…...

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点&#xff1a; 是一个用于Python的MySQL数据库驱动程序&#xff0c;用于与MySQL数据库进行交互。 依赖于MySQL的本地库&#xff0c;因此在安装时需要确保系统上已安装了必要的依赖项&#xff0c;如libmysqlclient-dev等。 性能较好&#xff0c…...

【可持久化线段树】 [SDOI2009] HH的项链 主席树(两种解法)

文章目录 1.题目描述2.思路3.解法一解法一代码 4.解法二解法二代码&#xff08;版本一&#xff09;解法二代码&#xff08;版本二&#xff09; 1.题目描述 原题&#xff1a;https://www.luogu.com.cn/problem/P1972 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳…...

【C语言】线程----同步、互斥、条件变量

目录 3. 同步 3.1 概念 3.2 同步机制 3.3 函数接口 1. 同步 1.1 概念 同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情 1.2 同步机制 通过信号量实现线程间的同步 信号量&#xff1a;通过信号量实现同步操作&#xff1b;由信号量来决定…...

15. 三数之和【力扣】--三指针

三数之和 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#x…...

大数据学习(35)- spark- action算子

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

vim使用指南

&#x1f3dd;️专栏&#xff1a;计算机操作系统 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 一、Vim 的基本概念 1.Vim 的主要模式&#xff1a; 1.1普通模式 (Normal Mode) 1.2插入…...

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像&#xff0c;这个镜像可以是从docker拉取&#xff0c;例如&#xff1a;现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…...

基于Java+SpringBoot+Vue的前后端分离的在线BLOG网

基于JavaSpringBootVue的前后端分离的在线BLOG网 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f3…...

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…...

Java学习教程,从入门到精通,JDBC驱动程序类型及语法知识点(91)

JDBC驱动程序类型及语法知识点 一、JDBC驱动程序类型 JDBC驱动程序主要有以下四种类型&#xff1a; 1. Type 1&#xff1a;JDBC - ODBC桥驱动程序&#xff08;JDBC - ODBC Bridge Driver&#xff09; 特点&#xff1a;这种驱动程序是Java与ODBC&#xff08;Open Database C…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator&#xff0c;点击Environment&#xff0c;再点击new(new是我下载anaconda的文件夹名称)&#xff0c;然后点击创建 点击绿色按钮&#xff0c;并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具&#xff0c;在上篇…...

3D目标检测数据集——Nusence数据集

链接地址 [官网] nuScenes[arXiv] nuScenes: A multimodal dataset for autonomous driving[GitHub] nuScenes devkitnuScenes devkit教程数据集概述 2.1 数据采集 2.1.1 传感器配置 nuScenes的数据采集车辆为Renault Zoe迷你电动车,配备6个周视相机&#x...

网站收录入口提交的方法有哪些(网站收录的方式都有哪些)

网站被搜索引擎收录是获得流量和曝光的重要前提&#xff0c;以下为你介绍常见的网站收录方式&#xff1a; 搜索引擎提交入口 各大搜索引擎都设有专门的网站收录入口&#xff0c;供站长提交网站。例如百度搜索资源平台、谷歌搜索控制台等。以百度为例&#xff0c;在百度搜索资…...

移动端H5缓存问题

移动端页面缓存问题是指页面的静态资源&#xff08;如图片、JS 和 CSS 文件&#xff09;在浏览器中被缓存后&#xff0c;用户在下次访问时可以直接从本地获取缓存数据&#xff0c;而不需要每次都从服务器重新获取&#xff0c;不过这样可能会导致页面不能正确地更新或者加载最新…...

11-1.Android 项目结构 - androidTest 包与 test 包(单元测试与仪器化测试)

androidTest 包与 test 包 在 Android 项目中&#xff0c;androidTest 包与 test 包用于存放不同类型的测试代码的 1、测试类型 &#xff08;1&#xff09;androidTest 包 主要用于存放单元测试&#xff08;Unit Tests&#xff09;代码 单元测试是针对应用程序中的独立模块…...

计算机网络(五)——传输层

一、功能 传输层的主要功能是向两台主机进程之间的通信提供通用的数据传输服务。功能包括实现端到端的通信、多路复用和多路分用、差错控制、流量控制等。 复用&#xff1a;多个应用进程可以通过同一个传输层发送数据。 分用&#xff1a;传输层在接收数据后可以将这些数据正确分…...

ZCC9159 -7V 300mA 超低功耗高速 LDO

功能描述 ZCC9195是一款超低功耗并具有快速响应、关断快速放电功能的高速LDO。静态电流低至 0.8uA&#xff0c;输出电流最大为300mA。 ZCC9195具有输出过流保护、输出短路保护、温度保护等功能&#xff0c;确保芯片在异常工作条件 下不会损坏。 ZCC9195只需要1uF的陶瓷电容即…...

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…...

【C语言算法刷题】第7题

题目描述 一个XX产品行销总公司&#xff0c;只有一个boss&#xff0c;其有若干一级分销&#xff0c;一级分销又有若干二级分销&#xff0c;每个分销只有唯一的上级分销。 规定&#xff0c;每个月&#xff0c;下级分销需要将自己的总收入&#xff08;自己的下级上交的&#xf…...

BERT与CNN结合实现糖尿病相关医学问题多分类模型

完整源码项目包获取→点击文章末尾名片&#xff01; 使用HuggingFace开发的Transformers库&#xff0c;使用BERT模型实现中文文本分类&#xff08;二分类或多分类&#xff09; 首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类 然后手动实现B…...

RocketMQ消息发送---源码解析

我们知道rocketMQ的消息发送支持很多特性&#xff0c;如同步发送&#xff0c;异步发送&#xff0c;oneWay发送&#xff0c;也支持超时机制&#xff0c;回调机制&#xff0c;并且能够保证消息的可靠性和消息发送的限流&#xff0c;底层使用netty框架等等&#xff0c;如此多的特性…...

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化&#xff08;Lasso&#xff09;2.2 L2正则化&#xff08;Ridge&#xff09;2.3 弹性网络正则化&#xff08;Elas…...

如何开放2375和2376端口供Docker daemon监听

Linux (以 Ubuntu 为例) 1. 修改 Docker 配置文件 打开 Docker 的配置文件 /etc/docker/daemon.json。如果该文件不存在&#xff0c;则可以创建一个新的。 bash sudo nano /etc/docker/daemon.json在配置文件中添加以下内容&#xff1a; json {"hosts": ["un…...

Vue.js组件开发-如何实现路由懒加载

在Vue.js应用中&#xff0c;路由懒加载是一种优化性能的技术&#xff0c;它允许在需要时才加载特定的路由组件&#xff0c;而不是在应用启动时加载所有组件。这样可以显著减少初始加载时间&#xff0c;提高用户体验。在Vue Router中&#xff0c;实现路由懒加载非常简单&#xf…...

rclone,云存储备份和迁移的瑞士军刀,千字常文解析,附下载链接和安装操作步骤...

一、什么是rclone&#xff1f; rclone是一个命令行程序&#xff0c;全称&#xff1a;rsync for cloud storage。是用于将文件和目录同步到云存储提供商的工具。因其支持多种云存储服务的备份&#xff0c;如Google Drive、Amazon S3、Dropbox、Backblaze B2、One Drive、Swift、…...

集成学习算法

目录 1.必要的导入 2.Bagging集成 3.基于matplotlib写一个函数对决策边界做可视化 4.总结图中结论 5.扩展说明 1.必要的导入 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals# Common imports import numpy as np…...

vue3之pinia学习

最近查看了pinia这个状态管理管理&#xff0c;想跟大家一起学习下&#xff0c;下面是我的个人理解&#xff0c;希望对大家有帮助&#xff0c;我们开始吧&#xff01; 第一步&#xff1a;安装pinia npm install pinia 第二步&#xff1a;创建pinia <script setup langts&…...

Flink (七): DataStream API (四) Watermarks

1. Event Time and Processing Time 1. 1 处理时间&#xff08;Processing time&#xff09; 处理时间是指执行相应操作的机器的系统时间。当流处理程序基于处理时间运行时&#xff0c;所有基于时间的操作&#xff08;如时间窗口&#xff09;将使用执行相应算子的机器的系统时…...

卷积神经05-GAN对抗神经网络

卷积神经05-GAN对抗神经网络 使用Python3.9CUDA11.8Pytorch实现一个CNN优化版的对抗神经网络 简单的GAN图片生成 CNN优化后的图片生成 优化模型代码对比 0-核心逻辑脉络 1&#xff09;Anacanda使用CUDAPytorch2&#xff09;使用本地MNIST进行手写图片训练3&#xff09;…...

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量&#xff1a;质量评估与改进策略 引言&#xff1a;数据质量的概念 在大数据时代&#xff0c;数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途&#xff0c;确保数据的准确性、完整性、一致性和及时性是数据质量的…...

GLM: General Language Model Pretraining with Autoregressive Blank Infilling论文解读

论文地址&#xff1a;https://arxiv.org/abs/2103.10360 参考&#xff1a;https://zhuanlan.zhihu.com/p/532851481 GLM混合了自注意力和masked注意力&#xff0c;而且使用了2D位置编码。第一维的含义是在PartA中的位置&#xff0c;如5 5 5。第二维的含义是在Span内部的位置&a…...

总结SpringBoot项目中读取resource目录下的文件多种方法

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

云原生第四次作业

下载 [rootopenEuler-1 ~]# wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz 压缩 配置实验环境 [rootopenEuler-1 httpd-2.4.46]# yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-d…...

day10_Structured Steaming

文章目录 Structured Steaming一、结构化流介绍&#xff08;了解&#xff09;1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型&#xff08;掌握&#xff09;1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…...

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口&#xff0c;让子类决定实列化哪一个类&#xff0c;工厂模式使一个类的实例化延迟到其子类&#xff1b; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中&#xff0c;核心工厂类不在负责产品的创建&#xff0c;而是将具体的创建工作…...

【算法学习】——整数划分问题详解(动态规划)

&#x1f9ee;整数划分问题是一个较为常见的算法题&#xff0c;很多问题从整数划分这里出发&#xff0c;进行包装&#xff0c;形成新的题目&#xff0c;所以完全理解整数划分的解决思路对于之后的进一步学习算法是很有帮助的。 「整数划分」通常使用「动态规划」解决&#xff0…...

【新教程】Ubuntu 24.04 单节点安装slurm

背景 网上教程老旧&#xff0c;不适用。 详细步骤 1、安装slurm sudo apt install slurm-wlm slurm-wlm-doc -y检查是否安装成功&#xff1a; slurmd --version如果得到slurm-wlm 23.11.4&#xff0c;表明安装成功。 2、配置slurm。 使用命令&#xff1a; sudo vi /etc/s…...

window下用vim

Windows 默认不支持 vim 命令&#xff0c;需要手动安装后才能使用。以下是解决方案&#xff1a; 1. 安装 Vim 编辑器 方法 1&#xff1a;通过 Scoop 或 Chocolatey 安装 使用 Scoop&#xff1a; 安装 Scoop&#xff08;如果尚未安装&#xff09;&#xff1a;iwr -useb get.sco…...

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中&#xff0c;Rewrite Actions 用于对负载均衡响应进行修改&#xff0c;包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成&#xff0c;帮助你根据需求调整请求内容。以下是三种常见的操作&#xff1a; 1. Replace (替换响应头)…...

使用PWM生成模式驱动BLDC三相无刷直流电机

引言 在 TI 的无刷直流 (BLDC) DRV8x 产品系列使用的栅极驱动器应用中&#xff0c;通常使用一些控制模式来切换MOSFET 开关的输出栅极。这些控制模式包括&#xff1a;1x、3x、6x 和独立脉宽调制 (PWM) 模式。   不过&#xff0c;DRV8x 产品系列&#xff08;例如 DRV8311&…...

常见的php框架有哪几个?

一直以来&#xff0c;PHP作为一种广泛使用的编程语言&#xff0c;拥有着许多优秀的框架来帮助开发人员快速构建稳定的Web应用程序。本文降为大家介绍几种常见的PHP的主流框架&#xff0c;以及它们相关的特点和使用场景。如有问题&#xff0c;欢迎指正&#xff01; 1.Laravel&a…...