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

Apache Paimon-实时数据湖

一、Apache Paimon是什么?

         Flink社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。

        Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。

        2023年3月12日,FTS进入 Apache 软件基金会 (ASF) 的孵化器,改名为 Apache Paimon (incubating)。

        简单来说,Apache Paimon是一个流数据湖平台,兼容Apach Flink、Spark等主流计算引擎,支持流批一体处理、快速查询和性能优化,具有高速数据摄取、变更日志跟踪和高效的实时分析的能力。

        目前,24年已经在阿里巴巴集团内大规模应用,目前更新到1.0版本。

官网介绍

Apache Paimon 是一种 Lake 格式,支持使用 Flink 和 Spark 构建实时 Lakehouse 架构,用于流式和批处理操作。Paimon 创新性地结合了 Lake 格式和 LSM(日志结构合并树)结构,将实时流式更新引入 Lake 架构。

Paimon 提供以下核心功能:

  • 实时更新:
    • 主键表支持大规模更新的写入,具有非常高的更新性能,通常通过Flink Streaming进行。
    • 支持定义合并引擎,按您喜欢的方式更新记录。删除重复项以保留最后一行、部分更新、聚合记录或第一行,您决定。
    • 支持定义changelog-producer,为合并引擎的更新生成正确、完整的changelog,简化您的流分析。
  • 大量附加数据处理:
    • 附加表(无主键)提供大规模批处理和流处理能力。自动小文件合并。
    • 支持通过 z 顺序排序进行数据压缩以优化文件布局,并使用 minmax 等索引提供基于数据跳过的快速查询。
  • 数据湖功能:
    • 可扩展的元数据:支持存储Petabyte大规模数据集,支持存储大量分区。
    • 支持 ACID 事务、时间旅行和模式演变。

官网:https://paimon.apache.org/ 

Github:https://github.com/apache/incubator2、文件-paimon

二、Apache Paimon原理

1、底层存储

        Paimon采用LSM树(日志结构合并树)作为文件存储的数据结构,LSM树将文件组织成多个Sorted Run,Sorted Run由一个或多个数据文件组成,并且每个数据文件只属于一个Sorted Run。

        写入LSM树的新记录将首先缓存在内存中。当内存缓冲区满时,内存中的所有记录将被排序并刷新到磁盘。

        查询LSM树时,必须合并所有Sorted Run。当越来越多的记录写入LSM树时,Sorted Run的数量将会增加。由于查询LSM树需要将所有Sorted Run合并起来,太多Sorted Run将导致查询性能较差,甚至内存不足。为了限制Sorted Run的数量,我们必须偶尔将多个Sorted Run合并为一个大的Sorted Run。这个过程称为Compaction

        但是过于频繁的Compaction可能会导致写入速度变慢,这是查询和写入性能之间的权衡。

2、文件管理

        一张表的所​​有文件都存储在一个基本目录下。Paimon 文件采用分层的方式组织。下图说明了文件布局。从快照文件开始,Paimon 读取器可以递归访问表中的所有记录。

2.1 Snapshot(快照文件)

        所有快照文件都存储在snapshot目录中。

        快照文件是一个 JSON 文件,改文件包含了:

  • 正在使用的架构文件

  • 包含此快照所有更改的清单

快照可以捕获表在某个时间点的状态。用户可以通过最新的快照访问表的最新数据。通过时间旅行,用户还可以通过较早的快照访问表的先前状态。

--->类似Hadoop中的镜像文件和编辑日志

2.2 Manifest Files(清单文件)

        所有的清单列表(manifest list)和清单文件(manifest file)都存储在manifest目录中。

        清单列表(manifest list)是清单文件名(manifest file)的列表。

        清单文件(manifest list)是包含有关 LSM 数据文件和变更日志文件的变更的文件。例如,在相应的快照中创建了哪个 LSM 数据文件以及删除了哪个文件。

2.3 DataFile(数据文件)

        数据文件按分区分组。目前,Paimon 支持使用 parquet(默认)、orc 和 avro 作为数据文件的格式。(avro是行存储、parquet和orc是列存储)

2.4 Partition(分区)

        Paimon 采用与 Apache Hive 相同的分区概念来分离数据。分区是一种可选方法,可根据日期、城市和部门等特定列的值将表划分为相关部分。每个表可以有一个或多个分区键来标识特定分区。通过分区,用户可以有效地对表中的一段记录进行操作。

2.5 一致性保证

        Paimon 写入器使用两阶段提交协议,以原子形式将一批记录提交到表中。每次提交在提交时最多产生两个快照。这取决于增量写入和压缩策略。如果仅执行增量写入而不触发压缩操作,则只会创建增量快照。如果触发了压缩操作,则会创建增量快照和压缩快照。

        对于同时修改表的任何两个writer,只要他们不修改同一个分区,他们的提交就可以并行发生。如果他们修改同一个分区,则只能保证快照隔离。也就是说,最终的表状态可能是两次提交的混合,但不会丢失任何更改。有关更多信息,请参阅专用压缩作业。

总结:Paimon通过LSM树(日志结构合并树)和列式存储格式(parquet/orc)实现高查询。

3、主要应用场景

3.1 Flink CDC将数据引入数据湖

        Paimon对此进行优化,可以一键摄取整个数据库,引入数据湖,大大降低了架构的复杂性,同时还提供灵活的更新选项,允许应用特定列或不用类型的聚合更新。(支持更新的数据入湖

3.2 构建流式数据管道

        PAIMON可用于构建完整的流式数据管道,其主要功能包括:生成ChangeLog,允许流式读取访问完全更新的记录,从而更轻松地构建强大的流式数据管道。

        PAIMON也正在发展为具有消费者机制的消息队列。最新版本引入了变更日志的生命周期管理,可让用户定义它们的保留时间,类似于 Kafka(例如,日志可以存储七天或更长时间)。这创建了一个轻量级、低成本的流媒体管道解决方案。        

3.3 超快速OLAP查询

        虽然前两个用例可确保实时数据流,但 PAIMON还支持高速 OLAP 查询来分析存储的数据。通过结合LSM和Index,PAIMON 可以实现快速数据分析。其生态系统支持Flink、Spark、StarRocks、Trino等多种查询引擎,都可以高效查询PAIMON中存储的数据。

4、实践案例

案例一:提升实时数据分析效率

问题描述:一家全球大型零售客户,其面临的挑战是如何在门店和电商平台并行的人群中进行实时的用户行为分析和个性化推荐。传统的数据分析架构下,系统无法高效处理大规模实时数据,导致用户体验不佳,推荐系统延迟高。

解决方案:通过引入Apache PAIMON,实时同步用户的购物行为和库存数据,结合Flink进行流式数据处理,客户能够基于最新数据生成个性化推荐。这不仅提升了用户的购物体验,还降低了基础设施成本。

案例二:构建可靠的实时业务监控

问题描述:一家零售客户,其供应链管理系统随着业务规模扩展和复杂性增加,运营与流程管理部门亟需实现对各类业务流程的实时监控,以确保流程的稳定性与高效性。然而,现有系统架构仅支持离线数据,无法满足实时业务需求。

解决方案:通过引入PAIMON数据湖,基于Aliyun EMR + OSS构建了一个实时数据湖。该系统通过Flink和Flink CDC实时收集多个数据源的数据,结合OSS对象存储,确保了数据的可查询性和分层复用。同时在分析层结合Doris,解决了OLAP分析时效性低的问题,提高了报表和监控系统的时效性。

--案例来自Artefact

三、Paimon和Flink神魔关系

        Paimon是做湖上的实时化处理,所以他是从Flink社区诞生的,是一种流批统一的数据湖存储格式,他能够与Flink紧密配合,实现实时数据湖。为了更好的了解Paimon,我们要求清楚其他的存储格式Iceberg、Hudi是什么,和Paimon有什么关系。

Apache Hudi、Apache Iceberg 、Apache Paimon都是面向大数据湖表格式存储管理框架

  • Hudi,发展最早,服务生态齐全,但是参数很多,开发要求较高,维护性差,面向批处理
  • Iceberg,表简单,没有很多表引擎,主要面向离线生态,对实时的更新很慢
  • Paimon,实时很快,流批一体

四、Paimon的好处

解决Kafka不可查的问题:以前使用Kafka做中间件来进行流处理,但是kafka是不可查的,所以最后还需要一个可以查询的引擎,比如把数据写入StarRocks上进行查询。但是Paimon作为一个湖格式,可以批写批读,也可以流写流读,它把整条streaming链路建立起来,每一层都是事实可查的,架构能够完全实现流批一体。

支持更新的数据入湖: 通过FlinkCDC,可以一键摄取整个数据库,引入数据湖,大大降低了架构的复杂性,同时还提供灵活的更新选项,允许应用特定列或不用类型的聚合更新。

参考文章:

流数据湖平台Apache Paimon(一)概述-阿里云开发者社区

Apache PAIMON:实时数据湖技术框架及其实践

【全网首发】Apache Paimon大厂面试必备系列-基础篇

Apache Paimon大厂面试题必备-进阶篇(一)

Paimon助力数据湖仓架构实时化升级-阿里云开发者社区

Flink+Paimon实时数据湖仓实践分享-CSDN博客

数据湖Iceberg、Hudi和Paimon比较_apache paimon-CSDN博客

相关文章:

Apache Paimon-实时数据湖

一、Apache Paimon是什么? Flink社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。 …...

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…...

蓝桥杯---纯职业小组(c语言)

问题描述 在蓝桥王国,国王统治着一支由n 个小队组成的强大军队。每个小队都由相同职业的士兵组成。具体地,第i 个小队包含了 bi名职业为ai的士兵。近日,国王计划在王宫广场举行一场盛大的士兵检阅仪式,以庆祝王国的繁荣昌盛。然而…...

先辑芯片HPM5300系列之SEI多摩川协议命令表问题研究

多摩川协议有9条命令,但是先辑SEI的命令表只有8张。0-6是可用的,第7张是黑洞表,所以只有7张可用。 命令表的限制颇多,比如命令表只能按顺序使用 :例如0、1、3,那么命令表3是不能用的。 如果想要实现9个命令…...

C++:string

一、string概念 之前介绍过通过字符数组保存字符串,然后对字符数组中的字符串做各种操作;为了更加简单方便,在C中,又增加了 string 来处理字符串。 char str[20] "hello world"; string 字符串其实是一种更加高级的封…...

用c实现C++类(八股)

在 C 语言中,虽然没有内建的面向对象编程(OOP)特性(如封装、继承、多态),但通过一些编程技巧,我们仍然可以模拟实现这些概念。下面将用通俗易懂的方式,逐步介绍如何在 C 中实现封装、…...

一区10+!线粒体基因组+宏基因组,微生态研究跨界新组合

在自然界中,微生物与宿主之间的共生关系是生物多样性和生态系统功能的重要组成部分。这些相互作用不仅塑造了宿主的进化历程,而且对宿主的生存和适应性至关重要。然而,这些共生关系的进化动态和共生菌基因组的演变仍然是微生物生态学和进化生…...

基于Python编程语言的自动化渗透测试工具

摘 要 近些年来网络安全形势变得越来越严峻,全球数百万个政企遭遇过不同程度的网络攻击。渗透测试是一种对目标进行信息安全评估的方法,而目前该行业仍在存在着安全服务行业价格昂贵,安全人才缺口巨大,在渗透测试时步骤繁琐、效率…...

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年,大模型技术已经普及并逐步渗透到各行各业,2025年注定是大模型应用井喷式发展的一年,AI在快速发展的同时,其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载:600多…...

C++例程:使用I/O模拟IIC接口(6)

完整的STM32F405代码工程I2C驱动源代码跟踪 一)myiic.c #include "myiic.h" #include "delay.h" #include "stm32f4xx_rcc.h" //初始化IIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphCl…...

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结: 农作物幼苗与杂草检测系统:基于YOLOv8深度学习框架,通过2822张图片训练了一个目标检测模型&#xff…...

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言,用户只需要指定想要执行的操作,而不需要详细说明如何…...

[Transformer] The Structure of GPT, Generative Pretrained Transformer

The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work...

【教程】Unity 本地化多语种 | Localization 工具组

开发平台:Unity 6.0 编程平台:Visual Studio 2022 编程语言:CSharp 6.0 工具包类:Localization   一、前言 本地化多语言类型是软件面向国际化所必须的功能项。Unity 在 2022 版本后推出 Localization 工具包,以降低…...

模式识别与机器学习

文章目录 考试题型零、简介1.自学内容(1)机器学习(2)机器学习和统计学中常见的流程(3)导数 vs 梯度(4)KL散度(5)凸优化问题 2.基本概念3.典型的机器学习系统4.前沿研究方向举例 一、逻辑回归1.线性回归2.逻辑回归3.随堂练习 二、贝叶斯学习基础1.贝叶斯公式2.贝叶斯决策3.分类器…...

鸿蒙面试 2025-01-10

写了鉴权工具,你在项目中申请了那些权限?(常用权限) 位置权限 : ohos.permission.LOCATION_IN_BACKGROUND:允许应用在后台访问位置信息。 ohos.permission.LOCATION:允许应用访问精确的位置信息…...

在vscode上

第一步 安装插件 (1)从菜单处打开vscode,之后点击左侧“拓展”,在搜索栏输入“platform”,安装这个插件。 注:安装过程可能会慢一点,可以尝试连接自己的热点 (2)安装完…...

用WebGPU实现现代Web3D渲染——突破传统性能瓶颈的解决方案

引言 随着Web技术的不断发展,Web3D应用的需求不断增加。从游戏引擎到可视化工具,3D渲染技术正在被广泛地应用。然而,传统WebGL技术在性能、效率和灵活性上仍存在局限性。而WebGPU作为一种新兴的Web标准,为现代3D渲染提供了强大而…...

HTML5 加载动画(Loading Animation)

加载动画(Loading Animation)详解 概述 加载动画是指在数据加载过程中,向用户展示的一种视觉效果,旨在提升用户体验,告知用户系统正在处理请求。它可以减少用户的等待焦虑感,提高界面的互动性。 常见的加…...

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

资源及介绍接上篇 nuget引用以下组件 效果展示: 内存和cpu占有: 代码如下:路径换成自己的模型路径 模型请从上篇文尾下载 internal class Program{private static CancellationTokenSource? cts;private static IChatClient? model;privat…...

Linux 高级路由 —— 筑梦之路

Linux 高级路由详解 本文将基于您提供的 Linux 高级路由极简教程 文章,深入探讨 Linux 高级路由的概念、配置方法以及应用场景。 一、什么是 Linux 高级路由? Linux 高级路由是指利用 Linux 内核提供的强大网络功能,实现超越传统路由表和默…...

实习总结(经历篇)

自从读研后,有可能是看见同龄的财会专业的同学去各种大厂实习:B站,阿里等,身边也有舍友在有过小厂实习,所以一直有个想法就是去实习,这个想法终于在研一的暑假快开始前被我赋予行动。 研一暑假和同门一起在boss等招聘软件投简历,但是当时并没有很好的对简历做修改,投递…...

【ShuQiHere】pandas 与 DataFrame 全面详解

【ShuQiHere】 本文将为您系统介绍 pandas 与 DataFrame 之间的区别,着重讲解 DataFrame 的常用方法以及相关的数据可视化操作,包括 df.hist()、df.plot()、df.boxplot() 等。无论您是数据分析新手还是有经验的专业人士,都可以从本文中快速掌…...

【回眸】发财日记

积累本金,有舍有得。 上学时在线上兼职,基本够开销没攒下钱,上班之后工资还能攒下不少。 对于花销要有舍有得。认同一句话“买东西要买能力范围内最好的”。 所以,每次花钱前都会思考: 是否需要,是否能替代已有产品&…...

文件读写到SQLite数据库的方法

在 SQLite 数据库中,将文件读写到数据库的常见方法主要有以下几种: 1. 将文件以 BLOB 类型存储 BLOB(Binary Large Object) 是 SQLite 中的二进制数据类型,可以直接用来存储文件内容。 步骤: 创建表 创建一…...

基于SDN的ddos攻击检测与防御

本项目依赖mininet, floodlight, sFlow-RT 1,启动floodlight cd floodlightjava -jar target/floodlight.jar 浏览器访问http://localhost:8080/ui/pages/index.html 或者http://localhost:8080/ui/index.html 2,创建 mininet拓扑 sudo mn --toposingl…...

RocketMQ 和 Kafka 有什么区别?

目录 RocketMQ 是什么? RocketMQ 和 Kafka 的区别 在架构上做减法 简化协调节点 简化分区 Kafka 的底层存储 RocketMQ 的底层存储 简化备份模型 在功能上做加法 消息过滤 支持事务 加入延时队列 加入死信队列 消息回溯 总结 来源:面试官:RocketMQ 和 Kafka 有…...

关于人工智能学习框架

人工智能学习框架:智能时代的强大引擎 在人工智能蓬勃发展的今天,学习框架如同一座座坚实的桥梁,连接着理论与实践,承载着创新与突破,为智能科技的前行提供了强大动力。本文将深入剖析人工智能学习框架的重要意义、核…...

Android14上使用libgpiod[gpioinfo gpioget gpioset ...]

环境 $ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.5 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.5 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="…...

【文件I/O】UNIX文件基础

IO编程的本质是通过 API 操作 文件。 什么是 IO I - Input 输入O - Output 输出 这里的输入和输出都是站在应用(运行中的程序)的角度。外部特指文件。 这里的文件是泛指,并不是只表示存在存盘中的常规文件。还有设备、套接字、管道、链接…...

TensorFlow Quantum快速编程(高级篇)

五、实战:量子分类器应用 5.1 数据准备 在实战构建量子分类器时,数据准备是基石环节。选用鸢尾花数据集,这一经典数据集在机器学习领域应用广泛,其涵盖了三种鸢尾花品种的样本,每个样本包含花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征。鉴于本次构建二分类量子分类…...

无人机+无人车:车机协同技术探索详解

无人机与无人车之间的协同技术是一种重要的研究方向,它结合了无人机的高空视野和无人车的地面移动能力,旨在实现更高效、灵活的作业。以下是对无人机与无人车车机协同技术的详细探索: 一、技术基础 1. 通信机制: 无人机与无人车…...

解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题

错误背景 WordPress版本:wordpress-6.6.2-zh_CN WooCommerce版本:woocommerce.9.5.1 WordPress在安装了WooCommerce插件后,安装的过程中没有问题,在安装完成后提示: 此站点遇到了致命错误,请查看您站点管理…...

scrapy爬取图片

scrapy 爬取图片 环境准备 python3.10scrapy pillowpycharm 简要介绍scrapy Scrapy 是一个开源的 Python 爬虫框架,专为爬取网页数据和进行 Web 抓取而设计。它的主要特点包括: 高效的抓取性能:Scrapy 采用了异步机制,能够高效…...

【数据库】六、数据库设计

文章目录 六、数据库设计1 数据库设计步骤1.1 规划阶段1.2 需求分析1.3 概念设计阶段(重点)1.4 逻辑设计阶段(重点)1.5 物理设计阶段1.6 数据库的实现1.7 数据库运行与维护 2 概念模型设计2.1 ER模型2.1.1 ER模型的基本元素2.1.2 联系的设计2.1.3 采用ER模型的概念设计2.1.4 ER…...

错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中

一、问题 用maven对一个开源项目打包时,遇到了“错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。”: 二、原因 原因是当前java环境是Java 8(版本52.0),但…...

不同音频振幅dBFS计算方法

1. 振幅的基本概念 振幅是描述音频信号强度的一个重要参数。它通常表示为信号的幅度值,幅度越大,声音听起来就越响。为了更好地理解和处理音频信号,通常会将振幅转换为分贝(dB)单位。分贝是一个对数单位,能…...

《探秘开源多模态神经网络模型:AI 新时代的万能钥匙》

《探秘开源多模态神经网络模型:AI 新时代的万能钥匙》 一、多模态模型的崛起之路(一)从单一到多元:模态的融合演进(二)关键技术突破:解锁多模态潜能 二、开源多模态模型深度剖析(一&…...

计算机网络之---端口与套接字

总括 端口:是计算机上用于标识网络服务的数字标识符,用于区分不同的服务或应用程序。套接字:是操作系统提供的用于进程间网络通信的编程接口,允许程序通过它来进行数据的发送、接收和连接管理。关系:端口号用于标识服…...

el-tabs中tabs过多造成form表单输入的时候卡顿

这里写自定义目录标题 tabs过多造成的输入卡顿解决方案方案一方案二 出现的并发问题解决方案 tabs过多造成的输入卡顿 描述:前端要写一个需求,大概有一百多个tab渲染过来,每个tab中都是一个表单,这个时候数据渲染任务加重&#x…...

vue+vite打包空白问题

在使用vuevite创建项目之后如果我们在部署项目的时候使用的不是主域名 比如www.custom.com 而是使用了www.custom.com/test 为访问域名的时候 如果不小心没有注意到这个变化 在打包上线之后会出现页面空白 js或者css404问题 我们可以在vite.config.ts去配置路径base export de…...

【python翻译软件V1.0】

如果不想使用密钥的形式,且需要一个直接可用的中英文翻译功能,可以使用一些免费的公共 API,如 opencc 或其他无需密钥的库,或直接用 requests 获取翻译结果。 其中,我可以给你一个简单的代码示例,使用 tra…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(while循环应用)

实战训练1—求最大公约数 问题描述: 给定两个正整数,求它们的最大公约数。 输入格式: 输入一行,包含两个正整数。 输出格式: 输出一行,包含gcd正整数,即这两个正整数的最大公约数。 输入…...

HTTPS协议的基础与工作原理

什么是HTTPS? HTTPS(HyperText Transfer Protocol Secure)是HTTP协议的安全版本,它通过SSL/TLS协议对通信数据进行加密,确保数据的安全传输。与HTTP相比,HTTPS能防止数据被窃取、篡改或伪造,广…...

手游业务该如何选择服务器?

在网络游戏行业当中,对于服务器配置的需求是非常高的,大型的网络游戏需要服务器的高稳定性,来保证用户的游戏体验感,那么对于手游业务来说该如何进行选择服务器呢? 手游业务通常都需要处理大量的用户数据信息和并发请求…...

Python 数据建模完整流程指南

在数据科学和机器学习中,建模是一个至关重要的过程。通过有效的数据建模,我们能够从原始数据中提取有用的洞察,并为预测或分类任务提供支持。在本篇博客中,我们将通过 Python 展示数据建模的完整流程,包括数据准备、建…...

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

今天在朋友机子上运行代码,在生成token的时候,遇到了这样一个问题: Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26) ~[jjwt-0.9.1.jar:0.…...

12. C语言 数组与指针(深入理解)

本章目录: 前言1. 什么是数组?2. 数组的声明与初始化声明数组初始化数组 3. 访问数组元素遍历数组 4. 获取数组长度使用 sizeof 获取长度使用宏定义简化 5. 数组与指针数组名与指针的区别使用指针操作数组 6. 多维数组遍历多维数组 7. 数组作为函数参数8. 高级技巧与…...

C#用直线和曲线抗锯齿

使用 GDI 绘制一条线时,要提供线条的起点和终点,但不必提供有关线条上各个像素的任何信息。 GDI 与显示驱动程序软件协同工作,确定将打开哪些像素以在特定显示设备上显示该线条。 效果对比 代码实现 关键代码 e.Graphics.SmoothingMode Sm…...

从SS到CSS:探索网页样式设计的奥秘

一、什么是CSS CSS,全称为层叠样式表(Cascading Style Sheets),是一种用于描述HTML(超文本标记语言)或XML(包括如SVG、MathML等各种XML方言)文档样式的样式表语言。 从结构和功能的…...