自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

打酱油的葫芦娃

大数据 | 算法 | 数据挖掘 | Java | Python | Flink | Tensorflow | PyTorch

  • 博客(132)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于我,技术交流

关于我坐标: 杭州本、硕均是交通专业,为了兴趣和爱好(主要是为了钱,哈哈哈),转行成为一名程序猿!技术方向为大数据和数据挖掘,Java为主,Python为辅。博客主要输出内容:分布式计算: Spark、Flink等框架的应用、架构设计、调优、源码分析等数据挖掘: TensorFlow、PyTorch等框架的应用及调优,机器学习算法、深度学习算法、强化学习等微服务: SpringBoot、SpringCloud全家桶、K8S等其他: Java进阶、Python数据分析等写博客的初衷总结、

2022-02-21 12:07:09 5942

原创 【论文精读】AGCRN-自适应图卷积循环神经网络

该论文提出了一种新型的自适应图卷积循环网络(AGCRN),用于预测城市交通流量和速度。AGCRN通过节点自适应参数学习和数据自适应图生成模块,自动捕捉交通序列中的时空相关性,无需预定义的图结构。实验结果表明,AGCRN在两个真实世界的交通数据集上显著优于现有技术。

2024-06-12 11:49:25 69

原创 【论文精读】Graph WaveNet-深度时空图模型

Graph WaveNet构建了一个自适应邻接矩阵,它能保留隐藏的空间依赖关系,能够自动从数据中发现未见的图结构。提出了一个有效且高效的框架,可同时捕捉空间和时间依赖关系。其核心思想是将其提出的图卷积与扩张因果卷积相结合,使每个图卷积层都能处理空间依赖关系。在交通数据集上评估了提出的模型,并以较低的计算成本获得了最先进的结果。

2024-06-06 12:40:39 66

原创 【论文精读】STGCN-一种用于交通预测的时空图卷积网络

STGCN旨在通过建模交通网络的空间和时间依赖性,来提高交通预测的准确性。STGCN利用图卷积网络来捕捉交通网络的空间特征,并结合门控时间卷积来处理时间序列数据,从而能够同时从空间和时间两个维度对交通流进行建模。

2024-06-06 12:37:09 264

原创 【论文精读】DCRNN-扩散图卷积循环神经网络

该论文提出了一种名为Diffusion Convolutional Recurrent Neural Network (DCRNN)的深度学习框架,用于交通流量预测。DCRNN通过将交通流视为有向图上的扩散过程,建立了双向扩散图卷积层来捕获交通流的空间依赖,利用编码器-解码器架构和策略采样技术捕捉时间依赖性。在两个大规模真实世界道路交通数据集上的评估显示,DCRNN在预测性能上比现有最先进的基线提高了12% - 15%。

2024-06-06 11:10:45 207

原创 【论文精读】STIDGCN-基于交互学习的时空动态图卷积网络

STIDGCN是一种先进的交通预测模型,利用 Spatial-Temporal Interactive Dynamic Graph Convolutional Networks 来捕获交通数据的复杂时空特征。通过动态图生成和卷积,模型能适应性学习节点间随时间变化的关联,强化对长期依赖的理解,从而在多个真实交通数据集中显著提升预测准确性,尤其擅长处理交通流量的未来趋势预测。其核心价值在于结合动态图结构与交互学习,实现高效时空特征提取,且代码开源,促进领域研究。

2024-05-30 11:40:12 146

原创 基于LSTM算法实现交通流量预测(Pytorch版)

本研究采用PyTorch框架,设计并实现了一种基于LSTM(Long Short-Term Memory)网络的交通流量预测模型。针对时序性显著的交通流量数据,模型首先将多节点、多通道的时空信息整合为一维特征输入至多层LSTM单元,利用其捕捉长期依赖及短期波动的能力进行深度学习。全连接层随后调整时间步长以适应预测周期需求。模型结构灵活,能适应不同节点数、输入输出长度及通道配置,实现在给定历史流量数据基础上对未来交通流量的精准预测,为交通管理与规划提供数据驱动支持。

2024-04-26 11:25:31 1657 2

原创 基于MLP算法实现交通流量预测(Pytorch版)

机器学习技术,尤其是深度学习方法,凭借其强大的模型构建能力和对复杂非线性关系的出色捕捉能力,逐渐崭露头角,成为交通流量预测领域的研究热点。其中,多层感知器(MLP)作为一类基础而经典的前馈型人工神经网络,以其简洁的结构、灵活的适应性和良好的泛化性能,在处理高维、非线性问题上展现出独特优势。 MLP通过模拟人脑神经元的工作机制,通过多层非线性变换对输入数据进行深度抽象和特征学习,能够有效挖掘交通流量数据背后的复杂关联与潜在模式,从而实现对未来的流量状态进行精准预测。

2024-04-22 16:52:55 2012 1

原创 突破百度地图Web API的配额限制,实现接口调用自由!

本文系统分析了百度地图开放平台的Web API调用方式,通过JS逆向的方式实现了关键参数的构建,从而突破百度地图Web API的配额限制,实现接口调用自由。

2024-02-20 11:18:26 1053

原创 MySQL的binlog和redolog

今天我们来聊一聊 MySQL 的 binlog 和 redo log。

2022-08-06 15:12:01 887 1

原创 基于源码搞懂LinkedHashMap并通过其实现LRU算法

LinkedHashMap 是通过哈希表和双向链表来实现的,其基于双向链表来保证对哈希表迭代时的有序性。LinkedHashMap 继承自 HashMap,从而可以直接复用 HashMap 对哈希表的操作逻辑,其只需要额外维护1套双向链表的操作逻辑即可。public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{ ......}节点LinkedHashMa

2022-05-07 17:24:08 3597

原创 彻底搞懂InnoDB存储引擎的索引模型

在 InnoDB 中,表都是根据主键的顺序以索引的形式来存放的,该种存放方式的表称为索引组织表。InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。每一个索引在 InnoDB 里面均对应1棵 B+ 树。在讲解主键的 B+ 树之前,需要了解1个前置知识点:操作系统从磁盘读取数据到内存是以磁盘块(block)为基本单位的,位于同一个磁盘块的数据将被一次性读取出来,而不是需要什么取什么,该做法的理论依据就是计算机科学中著名的局部性原理–当一个数据被用到时,其附近的数据通常也会马上被使

2022-04-25 11:00:47 4478

原创 MySQL的InnoDB索引结构为啥选用B+树?

如果把数据库中的数据当做1个词典,那索引就是字典的目录,其目的是提升查找数据的速度。树的数据结构天然适合查找操作,最先被想到就是搜索二叉树。搜索二叉树二叉树(Binary Search Tree)是每个节点最多有2个子树(左子树和右子树)的树结构,而搜索二叉树是一类特殊的二叉树,其具有以下性质:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;它的左右子树也分别为搜索二叉树。搜索二叉树中序遍历的结果是有序的。搜索二

2022-04-20 14:51:12 6455

原创 如何在CentOS7系统上离线安装MySQL数据库

本文主要讲解如何在 CentOS7 系统上离线安装 MySQL 数据库。下载安装包http://dev.mysql.com/downloads/mysql/上传到服务器,解压(base) [root@master ~]# cd /usr/lib/ruanshubin/(base) [root@master ruanshubin]# tar -zvxf ./mysql-8.0.28-el7-x86_64.tar.gz 创建 mysql 用户(base) [root@master

2022-04-15 15:47:56 5413

原创 一文教会你HashMap为啥线程不安全(多图VIP版)

首先思考一下,为啥 HashMap 会存在线程安全性问题?有的人脱口而出,JDK7 的 HashMap 因为采用头插法,多线程环境下会造成死循环,JDK8 虽然改用了尾插法,但多线程环境下仍然存在丢失更新的问题,所以 HashMap 存在线程安全性问题。一听就是老八股人了,哈哈哈。但其实上面的答案并不全面,而且很容易误导编程的新手,让新手总以为 HashMap 只是因为死循环或者丢失更新的问题才导致的线程不安全。HashMap 之所以存在线程安全性问题,本质上是因为 HashMap 的"增删改"操作

2022-04-14 20:27:08 7073 2

原创 Flink进阶系列--类加载机制

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.要讲解 Flink 的类加载机制,首先你得对 JDK 的类加载机制有所了解。推荐阅读我之前写的1篇博客: 基于源码深入了解Java的类加载机制(JDK8和JDK11双版本)接着看一下 FLink 的类加载器继承结构:FlinkUserCodeClassLoader 继承自 URLClassLoader 类,其 loadClass() 方法实现如下:@Overridepublic final Cl.

2022-04-10 16:38:47 7442 1

原创 基于源码深入了解Java的类加载机制(JDK8和JDK11双版本)

Java 虚拟机设计团队有意将类加载阶段中的"通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到 Java 虚拟机外部来实现,以便让应用程序自己来决定如何去获取所需的类,实现这个动作的代码称之为"类加载器 (Class Loader) "。由于 JDK9 引入了模块化新特性,所以 JDK9 前后的类加载实现也略有区别,本文将分开讲解。首先基于 JDK8 来讲解类加载机制。JDK8双亲委派模型java.lang.ClassLoader 抽象类的 loaderClass() 方法定义了类加

2022-04-09 16:59:49 7006

原创 Flink源码解析系列--StreamExecutionEnvironment类

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.Flink 程序看起来像一个转换 DataStream 的常规程序。每个程序由相同的基本部分组成:获取一个执行环境(execution environment);加载/创建初始数据;指定数据相关的转换;指定计算结果的存储位置;触发程序执行。StreamExecutionEnvironment 是所有 Flink 程序的基础。创建你可以使用 StreamExecutionEnvironme.

2022-03-31 18:25:00 10401 1

原创 Flink源码解析系列--Timer定时器

Timer(定时器)是 Flink Streaming API 提供的用于感知并利用 Processing Time/Event Time 变化的机制。Ververica blog上给出的描述如下:Timers are what make Flink streaming applications reactive and adaptable to processing and event time changes.对于普通用户来说,最常见的显式利用 Timer 的地方就是 KeyedProcessF

2022-03-26 16:44:02 8237

原创 Flink源码解析系列--ProcessingTimeService定时器

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.@PublicEvolvingpublic interface ProcessingTimeService { // 返回当前的 processing time long getCurrentProcessingTime(); /** * Registers a task to be executed when (processing) time is {@code .

2022-03-24 22:05:39 7104

原创 Flink源码解析系列-- WatermarkGenerator接口及其常用实现

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.Flink 提供了 WatermarkGenerator 接口用来"制造"水印:/** * {@code WatermarkGenerator} 可以基于事件或者周期性的生成 watermark。 * * <p><b>注意:</b> WatermarkGenerator 将以前互相独立的 {@code AssignerWithPunctuatedWatermar.

2022-03-23 22:46:50 7025

原创 Flink入门系列--和Springboot框架结合(1.14.3版本)

本文 Flink 版本为 1.14.3。本文主要讲解如何将 Flink 和 Springboot 两大框架融合在一起,可以对接 SpringCloud 生态系统,比如分布式配置中心、服务注册和发现、负载均衡等;可以通过 Restful 接口的形式提交 Flink 任务。本地工程构建软件环境:Flink 1.14.3Springboot 2.0.3.RELEASEJDK 11<?xml version="1.0" encoding="UTF-8"?><proj.

2022-03-20 12:51:40 10433 4

原创 Flink进阶系列--FLIP-27新的Source架构

Source 旧架构在 Flink 1.12之前,开发一个新的 source connector 是通过实现 SourceFunction 接口来完成的。@Publicpublic interface SourceFunction<T> extends Function, Serializable { // 当 source 开始发送数据时,run 方法被调用,其参数 SourceContext 用于发送数据。run 方法是一个无限循环,通过一个标识 isRunning 来跳出循

2022-03-18 16:16:47 9846

原创 Flink源码解析系列--FutureCompletingBlockingQueue阻塞队列

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.Flink 在实现 SourceReaderBase 类时,并没有直接使用 JDK 自带的BlockingQueue 阻塞队列来缓冲 fetcher 线程获取的元素,而是自定义1个阻塞队列,即 FutureCompletingBlockingQueue 类。FutureCompletingBlockingQueue 的入队实现基本和 ArrayBlockingQueue实现类似,当队列已满时,会通过 Co.

2022-03-17 19:25:02 6192

原创 Flink入门系列--架构、应用程序执行、分层API(1.14.3版本)

Flink 集群剖析Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run …中运行。可以通过多种方式启动 JobManager 和 TaskManager:直接在

2022-03-16 19:08:04 6054

原创 Flink源码解析系列--StreamPartitioner(流分区器)

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.StreamPartitioner抽象类@Internalpublic abstract class StreamPartitioner<T> implements ChannelSelector<SerializationDelegate<StreamRecord<T>>>, Serializable { private stat.

2022-03-15 22:16:37 5965

原创 Flink源码解析系列--SubtaskStateMapper枚举类

假如 Flink 任务某个算子的并行度为4,该算子的状态做了 checkpoint 后任务停止。该算子的并行度调整为2后重新启动任务,新 task 中的各个 subtask 需要从 checkpoint 中哪些旧的 subtask 中获取数据呢?Flink 提供了 SubtaskStateMapper 枚举类来定义上述行为。其核心方法为:public abstract int[] getOldSubtasks( int newSubtaskIndex, int oldNumberOfSubtask

2022-03-14 15:41:41 6198

原创 Flink入门系列--安装部署及任务提交(1.14.3版本)

部署模式Flink 的部署模式分为3种:Application 模式Per-Job 模式Session 模式Application 模式Application 模式即 Flink 为1个应用专门创建1个集群,Flink集群和应用同生命周期,Application 的main()方法将由 JobManager执行。在其他部署模式下,用户 Jar 文件是通过 RPC 来进行分发的,因为需要走网络IO,当用户 Jar 文件较大时,JobManager 加载用户 Jar 文件将是1个耗时的操作。为

2022-03-12 11:57:12 7911

原创 数字的计算机表达--大小端和浮点数

大端和小端起源关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了王位,产生叛乱的原因就是另

2022-03-10 19:52:47 5457

原创 手撸RPC框架系列--Java简易版

RPC是Remote Procedure Call(远程过程调用)的简写,即实现调用远程计算机上的方法,就像调用本地方法一样。分布式环境下各个服务之间的协作,必然会用到RPC的思想。一般来讲,RPC框架会包含3部分:服务提供者(ServiceProvider)注册中心(RegistryCentre)服务消费者(ServiceComsumer)RPC整个过程可以概括如下:定义好统一的请求体(RpcRequest)和返回体(RpcResponse);定义好服务接口;服务提供者完成接口的实

2022-03-10 19:43:18 5031

原创 Flink源码解析系列--JdbcDialect接口

本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.虽然不同的关系型数据库均遵循一定的统一标准,但各自的Driver实现,增删改查的SQL语法等可能略有不同。就跟中国话也有各地区的方言一样,数据库也有属于自己的"方言",即JdbcDialect。在Flink中,JdbcDialect被定义为1个接口。public interface JdbcDialect extends Serializable { // 方言名称 String di.

2022-03-09 13:45:05 6049

原创 一文教会你Gitlab搭建

安装步骤配置yum源vim /etc/yum.repos.d/gitlab-ce.repo复制以下内容:[gitlab-ce]name=gitlab-cebaseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6Repo_gpgcheck=0Enabled=1Gpgkey=https://packages.gitlab.com/gpg.key更新本地yum缓存sudo yum makecache安装Gi

2022-03-08 11:29:32 8366

原创 Git私服搭建

系统环境系统: Linux:CentOS 7.2 64位由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。查看ssh版本:[root@****** ~]# ssh -V# 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。安装git建议以下操作都切换到root:# 请确保您切换到了roo

2022-03-08 11:23:58 8024

原创 Thread类源码解读3--线程中断interrupt

线程中断是一个很重要的概念,通常,取消一个任务的执行,最好的,同时也是最合理的方法,就是通过中断。本篇我们主要还是通过源码分析来看看中断的概念。本文的源码基于JDK1.8Interrupt status & InterruptedExceptionjava线程的中断机制为我们提供了一个契机,使被中断的线程能够有机会从当前的任务中跳脱出来。而中断机制的最核心的两个概念就是interrupt status 和 InterruptedException。java中对于中断的大部分操作无外乎以下两

2022-03-07 23:45:43 4841

原创 Thread类源码解读2--线程状态及常用方法

本文源码基于jdk1.8 。线程状态在Thread类中, 线程状态是通过threadStatus属性以及State枚举类实现的:/* Java thread status for tools, * initialized to indicate thread 'not yet started' */private volatile int threadStatus = 0;public enum State { /** * Thread state for a threa

2022-03-07 23:44:11 4855

原创 Thread类源码解读1--如何创建和启动线程

本文源码基于jdk1.8 。Runnale接口我们看Thread类的定义知道,它实现了Runable接口public class Thread implements Runnable { ...}而Runnable接口的定义如下:@FunctionalInterfacepublic interface Runnable { public abstract void run();}它只有一个抽象方法run。同时,该接口还被@FunctionalInterface注解标注,

2022-03-06 10:03:31 5051

原创 Yarn的调度器--Scheduler探究

引言在Yarn体系中,Scheduler负责为Application分配资源,按照调度策略可分为以下3种:FIFO SchedulerCapacity SchedulerFair Scheduler[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1MDm561-1646531647469)(Yarn的调度器–Scheduler探究/1.jpg)]下面具体介绍上述3种调度器:FIFO Scheduler顾名思义,该调度器是按照应用的提交顺序分配资源的,先进先

2022-03-06 10:01:34 5044

原创 Yarn的资源配置参数

YARN的资源调度主要针对的是内存(Memory)和CPU,并将其组合抽象成Container来管理分配。在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基

2022-03-05 16:14:57 5558

原创 Yarn的基本架构

基本流程1.应用程序通client类向ResourceManager提交程序,Application运行所需要的入口类,出口类,运行的命令,运行所需要的cpu资源和内存资源,jar包资源。2.ResourceManager通过内部的调度器,去集群中寻找资源,找到资源后与NodeManager进行通信,去启动相应的ApplicationMaster,AM会按照事先的规划将任务切分为许多的task任务。3.ApplicationMaster之后向ResourceManager进行申请资源,RM会将资源进行

2022-03-05 16:13:03 7765

原创 Java停止线程的3种方式

在Java中有以下3种方式终止正在运行的线程:使用退出标志,使线程正常退出;使用stop()方法强行终止线程,不推荐使用该方法,JDK已声明弃用;使用interrupt方法中断线程。使用标志位在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法会被一直执行;比如在服务端程序中可能会使用 while(true) { … } 这样的循环结构来不断的接收来自客户端的请求。此时就可以用修改标志位的方式来结束 run() 方法。public class Server

2022-03-04 11:14:39 8116

快学Scala(完整版)

快学Scala(完整版)

2017-09-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除