Apache Spark 从入门到实践:核心架构、环境搭建与数据分析案例详解
在实际大数据处理项目中Apache Spark 因其卓越的内存计算能力和丰富的生态已经成为处理海量数据的首选框架之一。然而对于许多初学者和中级开发者而言从理解 Spark 的核心概念到成功搭建一个可运行的环境再到编写出高效、稳定的应用程序中间存在着不少认知和实践的鸿沟。常见的困惑包括Spark 的核心组件到底是如何协同工作的为什么我的 Spark 程序在本地能跑一上集群就报错面对object spark is not a member of package org.apache这类依赖问题该如何解决以及如何将 Spark 真正用于一个数据分析案例本文旨在系统性地拆解 Apache Spark我们将它比作一个“星火发射平台”。我们将从理解其核心架构发射平台的控制系统开始然后一步步完成环境搭建发射平台的基建接着通过一个完整的数据分析案例模拟一次发射任务来串联核心 API 的使用最后深入探讨生产环境中常见的配置、调优和排错问题确保发射成功与稳定的保障措施。无论你是希望快速上手 Spark 进行数据分析还是需要为团队搭建和维护 Spark 集群这篇文章都将提供一条清晰的路径。1. 理解 Spark “星火发射平台”的核心架构在开始写代码或搭建集群之前理解 Spark 的基本设计思想至关重要。这能帮助你在后续遇到问题时快速定位是编程模型、资源调度还是数据存储层面的问题。1.1 Spark 为何被称为“内存计算引擎”传统的大数据处理框架如 Hadoop MapReduce在计算过程中需要频繁地将中间结果写入磁盘这导致了大量的 I/O 开销成为性能瓶颈。Spark 的核心创新在于提出了弹性分布式数据集RDD, Resilient Distributed Dataset的概念。你可以把 RDD 想象成 Spark 平台上的“燃料舱”。它是一个不可变、可分区的数据集合可以跨集群节点进行并行操作。最关键的是Spark 会将一个作业Job中的多个转换Transformation操作串联起来形成一个有向无环图DAG。只有在遇到行动Action操作如collect(),count()时Spark 才会触发整个 DAG 的调度与执行。在这个过程中中间数据尽可能保存在内存中只有内存不足时才会溢写到磁盘。这种“惰性求值”和“内存优先”的策略使得 Spark 在处理迭代算法如机器学习和交互式查询时性能比基于磁盘的框架快出数量级。1.2 Spark 生态系统的主要组件一个完整的“发射平台”由多个子系统构成Spark 也不例外。其核心运行架构主要包含以下组件Driver Program驱动程序这是你的 Spark 应用程序的主入口相当于发射控制中心。它负责定义 RDD 以及对其的转换和行动操作。SparkContext是 Driver 与集群沟通的桥梁。Cluster Manager集群管理器负责为应用程序分配资源相当于平台的资源调度系统。Spark 支持多种集群管理器StandaloneSpark 内置的简易集群管理器。Apache YARNHadoop 生态的资源管理器在企业中非常常见。Apache Mesos通用的集群管理器。Kubernetes容器编排平台是云原生场景下的新趋势。Executor执行器运行在集群工作节点上的进程相当于平台上的各个“发动机”。每个 Executor 负责运行具体的计算任务Task并将数据存储在内存或磁盘中。Worker Node工作节点集群中任何可以运行应用代码的机器是“发动机”的载体。当你提交一个 Spark 应用时Driver 会向 Cluster Manager 申请资源后者在 Worker Node 上启动 Executor。随后Driver 将你的应用代码主要是 RDD 的转换操作序列化并发送给 Executor 执行。Executor 将计算结果返回给 Driver或写入外部存储系统。理解这个流程对于后续调试ClassNotFound、任务卡住、数据倾斜等问题有根本性的帮助。2. 搭建你的第一个 Spark 环境理论之后是实践。我们首先在本地搭建一个学习环境这是验证一切概念和代码的最快方式。2.1 环境准备与依赖配置对于学习和小规模测试我们采用Local 模式即 Driver、Executor 都运行在单个 JVM 进程中。这避免了复杂的集群配置。1. 基础环境要求JavaSpark 运行在 JVM 上需要安装 JDK。推荐 JDK 8 或 JDK 11请确认与 Spark 版本的兼容性。Scala可选Spark 原生使用 Scala 编写但完美支持 Java、Python 和 R。如果你用 PythonPySpark则需要 Python 环境推荐 3.7。2. 下载与安装 Spark访问 Apache Spark 官网下载页面 。选择最新的稳定版本如 Spark 3.5.x包类型选择“Pre-built for Apache Hadoop 3.3 and later”。这个预编译版本包含了大多数常用 Hadoop 依赖适合初学者。下载完成后解压到本地目录例如/opt/spark或C:\spark。3. 配置环境变量以 Linux/macOS 为例将 Spark 的bin目录加入PATH并设置SPARK_HOME方便后续使用命令行工具。# 编辑 ~/.bashrc 或 ~/.zshrc export SPARK_HOME/opt/spark export PATH$PATH:$SPARK_HOME/bin # 使配置生效 source ~/.bashrc4. 验证安装运行spark-shellScala REPL或pysparkPython REPL来启动一个本地 Spark 会话。如果看到 Spark 的 ASCII 艺术 Logo 和 Scala/Python 提示符说明本地模式启动成功。$ spark-shell ... Spark context Web UI available at http://localhost:4040 Spark context available as sc (master local[*], app id local-...). Spark session available as spark. ... scala此时Spark 已经创建了两个关键对象SparkContext (sc)和SparkSession (spark)。spark是 Spark 2.0 后统一的入口点。2.2 解决经典依赖问题object spark is not a member of package org.apache这个问题是 Spark 新手在 IDE如 IntelliJ IDEA中构建项目时最常遇到的。其根本原因是项目的构建工具如 Maven、SBT未能正确引入 Spark 的核心库。现象在 Scala 或 Java 代码中import org.apache.spark._语句报错提示找不到符号。可能原因与解决方案构建文件依赖缺失或错误检查点打开你的pom.xml(Maven) 或build.sbt(SBT) 文件。解决方案确保已正确定义了 Spark 核心依赖。注意scope通常应为compile默认。Maven 示例 (pom.xml)dependencies dependency groupIdorg.apache.spark/groupId artifactIdspark-core_2.13/artifactId !-- 注意 Scala 版本后缀 -- version3.5.0/version /dependency dependency groupIdorg.apache.spark/groupId artifactIdspark-sql_2.13/artifactId version3.5.0/version /dependency /dependenciesSBT 示例 (build.sbt)name : MySparkProject version : 1.0 scalaVersion : 2.13.12 // 必须与 Spark 的 Scala 版本匹配 libraryDependencies Seq( org.apache.spark %% spark-core % 3.5.0, org.apache.spark %% spark-sql % 3.5.0 )关键spark-core_2.13中的2.13是 Scala 的二进制版本号必须与你项目使用的 Scala 版本严格匹配。Spark 3.x 通常支持 Scala 2.12 和 2.13。IDE 未刷新或下载依赖检查点在 IDEA 中查看右侧 Maven 工具栏是否有红色错误或检查外部库列表是否包含 Spark JAR 包。解决方案执行mvn clean compile或点击 Maven 的刷新按钮。对于 SBT可以执行sbt update。项目 SDK 或 Scala 编译器设置错误检查点确保项目模块使用的 JDK 版本正确并且 Scala 插件已安装编译器版本与依赖声明一致。解决方案在 IDEA 的Project Structure中检查Project和Modules设置。3. 从零编写一个数据分析案例现在我们通过一个完整的案例来学习 Spark Core 和 Spark SQL 的基本使用。假设我们有一份网站用户访问日志的文本文件需要统计每个页面的访问次数。3.1 准备数据与项目结构首先创建一个简单的文本文件page_views.log内容如下user1,pageA,2023-10-01 10:00:00 user2,pageB,2023-10-01 10:01:00 user1,pageA,2023-10-01 10:05:00 user3,pageC,2023-10-01 10:10:00 user2,pageA,2023-10-01 10:15:00 user1,pageB,2023-10-01 10:20:00创建一个标准的 Maven 或 SBT 项目确保依赖已正确配置如上节所述。我们创建一个主类PageViewAnalysis。3.2 使用 Spark Core (RDD API) 实现RDD API 是 Spark 最基础的编程接口理解它有助于深入理解 Spark 的计算模型。import org.apache.spark.{SparkConf, SparkContext} object PageViewAnalysisRDD { def main(args: Array[String]): Unit { // 1. 创建 SparkConf 和 SparkContext val conf new SparkConf() .setAppName(PageViewAnalysisRDD) .setMaster(local[*]) // 本地模式使用所有CPU核心 val sc new SparkContext(conf) try { // 2. 从本地文件系统读取文本文件创建 RDD val linesRDD sc.textFile(data/page_views.log) // 假设文件在项目根目录的data文件夹下 // 3. 转换操作解析每一行提取页面信息 val pagePairsRDD linesRDD.map(line { val columns line.split(,) (columns(1), 1) // 生成 (page, 1) 的键值对 }) // 4. 转换操作按页面聚合 val pageCountsRDD pagePairsRDD.reduceByKey(_ _) // 对相同key的value进行相加 // 5. 行动操作触发计算并收集结果到Driver端 val results pageCountsRDD.collect() // 6. 打印结果 results.foreach { case (page, count) println(sPage: $page, Views: $count) } // 也可以保存到文件系统 // pageCountsRDD.saveAsTextFile(output/rdd_result) } finally { // 7. 关闭 SparkContext sc.stop() } } }关键点解释setMaster(“local[*]”)指定运行模式local[*]表示在本地使用尽可能多的线程模拟并行。textFile从文件创建 RDD每一行是一个元素。map转换操作对 RDD 中每个元素应用函数生成新的 RDD。此时并不真正计算。reduceByKey转换操作针对键值对 RDD将相同 key 的 value 进行聚合。这是一个Shuffle操作数据会在集群节点间重新分布成本较高。collect行动操作它将 RDD 中的所有数据拉取到 Driver 程序。注意如果数据量非常大此操作会导致 Driver 内存溢出OOM。生产环境中应慎用或使用take(N)、saveAs…等操作。sc.stop()非常重要用于释放资源。3.3 使用 Spark SQL (DataFrame/Dataset API) 实现Spark SQL 提供了更高级的、以结构化数据为中心的 APIDataFrame/Dataset它拥有更丰富的优化器Catalyst和执行引擎Tungsten性能通常优于直接使用 RDD且代码更简洁。import org.apache.spark.sql.{SparkSession, functions F} object PageViewAnalysisSQL { def main(args: Array[String]): Unit { // 1. 创建 SparkSession (Spark 2.0 的统一入口) val spark SparkSession.builder() .appName(PageViewAnalysisSQL) .master(local[*]) .getOrCreate() import spark.implicits._ // 引入隐式转换允许将 RDD 转为 DataFrame try { // 2. 读取数据为 DataFrame // 指定 schema 或让 Spark 推断 val df spark.read .option(header, false) // 文件没有表头 .option(inferSchema, true) // 自动推断列类型 .csv(data/page_views.log) .toDF(user_id, page, timestamp) // 为列命名 // 3. 查看数据结构和前几行 df.printSchema() df.show() // 4. 使用 DataFrame API 进行聚合 val resultDF df .groupBy($page) // 按 page 列分组 .agg(F.count($page).as(view_count)) // 聚合函数计数 .orderBy($view_count.desc) // 按访问量降序排序 // 5. 展示结果 resultDF.show() // 6. 也可以使用 SQL 语法 df.createOrReplaceTempView(page_views) // 创建临时视图 val sqlResultDF spark.sql( SELECT page, COUNT(*) as view_count FROM page_views GROUP BY page ORDER BY view_count DESC ) sqlResultDF.show() } finally { // 7. 停止 SparkSession spark.stop() } } }关键点解释SparkSession取代了旧的SQLContext和HiveContext是使用 Dataset/DataFrame API 的起点。spark.read.csv(...)使用 DataFrameReader 从 CSV 文件读取数据返回一个 DataFrame。printSchema()和show()用于调试查看数据结构和内容。groupBy和agg声明式的聚合操作Spark 的 Catalyst 优化器会将其转换为物理执行计划。$”page”是col(“page”)的简写引用名为 “page” 的列。createOrReplaceTempView将 DataFrame 注册为一个临时 SQL 视图允许你用纯 SQL 语句进行查询。这对于熟悉 SQL 的开发者非常友好。性能优势DataFrame 操作会经过 Catalyst 优化器可能进行谓词下推、列裁剪等优化并且 Tungsten 引擎使用堆外内存和特定编码效率更高。运行上述任一程序你都将得到类似以下的结果--------------- | page|view_count| --------------- |pageA| 3| |pageB| 2| |pageC| 1| ---------------4. 向集群进发Spark 集群模式与生产考量本地模式适合学习和测试但 Spark 的真正威力在于分布式集群。常见的集群部署模式有 Standalone、YARN 和 Kubernetes。4.1 Spark Standalone 集群搭建简述Standalone 是 Spark 自带的集群模式部署相对简单。节点规划至少需要一台 Master 节点和多台 Worker 节点。可以在一台机器上模拟伪分布式。配置在$SPARK_HOME/conf/目录下复制spark-env.sh.template为spark-env.sh配置环境变量如JAVA_HOME,SPARK_MASTER_HOST等。复制workers.template为workers列出所有 Worker 节点的主机名。启动集群# 在 Master 节点上 $SPARK_HOME/sbin/start-master.sh $SPARK_HOME/sbin/start-workers.sh提交应用应用打包成 JAR 后使用spark-submit提交到集群。$SPARK_HOME/bin/spark-submit \ --class com.example.PageViewAnalysisSQL \ --master spark://master-host:7077 \ --deploy-mode cluster \ --executor-memory 2G \ --total-executor-cores 4 \ /path/to/your-application.jar4.2 生产环境关键配置与调优思路在集群上运行生产任务时需要关注资源配置和作业调优。配置项含义调优建议--executor-memory每个 Executor 的内存根据任务数据量和复杂度设置通常 4G-8G 起步。需预留一部分给堆外内存和系统。--executor-cores每个 Executor 使用的 CPU 核心数通常 2-5 个。太多会导致 HDFS 客户端竞争太少则并发度低。spark.sql.shuffle.partitionsSQL 操作中 Shuffle 的分区数默认 200。如果数据量小可调小以减少任务开销如果数据量大且存在倾斜可调大。spark.default.parallelism默认并行度如 reduceByKey通常设置为集群总核心数的 2-3 倍。spark.serializer序列化器生产环境推荐org.apache.spark.serializer.KryoSerializer性能优于 Java 序列化。spark.memory.fractionSpark 内存中用于执行和存储的比例默认 0.6。如果缓存需求大可适当调高如果计算复杂可保持默认。常见性能问题与调优方向数据倾斜少数 Task 处理的数据量远大于其他 Task。解决方案包括使用salting加盐技术打散 key使用filter先过滤异常大 key或尝试调整聚合策略。Shuffle 溢出Shuffle 数据量过大写入磁盘频繁。可尝试增加spark.shuffle.file.buffer减少spark.reducer.maxSizeInFlight或从根本上减少 Shuffle 数据量如使用map-side combine。GC 开销大Executor 因垃圾回收停顿时间长。可尝试使用 G1GC 垃圾回收器增加 Executor 内存或减少缓存的对象大小。5. 实战排错与最佳实践5.1 常见错误排查清单问题现象可能原因检查与解决思路ClassNotFoundException/NoClassDefFoundError依赖缺失或冲突JAR 包未正确打包或上传。1. 检查spark-submit的--jars或--packages参数。2. 使用mvn dependency:tree检查依赖冲突。3. 确保使用maven-assembly-plugin或maven-shade-plugin打包含所有依赖的 Uber JAR。任务卡在ACCEPTED状态集群资源不足队列资源限制。1. 查看集群管理器YARN RM / Spark Master UI的资源使用情况。2. 检查应用申请的 CPU/内存是否超出队列限额。3. 查看是否有其他大任务占用了资源。java.lang.OutOfMemoryError: Java heap spaceExecutor 或 Driver 内存不足。1. 增加--executor-memory或--driver-memory。2. 检查是否存在数据倾斜导致单个 Task 负载过重。3. 检查代码中是否有collect()操作收集了过大数据到 Driver。Could not find CoarseGrainedScheduler网络通信问题集群节点防火墙Spark 版本不一致。1. 检查 Master 和 Worker 节点的网络连通性。2. 检查防火墙是否开放了 Spark 端口默认 7077, 8080等。3. 确保集群所有节点 Spark 版本一致。读取 HDFS 文件慢或失败HDFS 客户端配置错误NameNode 连接问题文件权限问题。1. 确保core-site.xml和hdfs-site.xml在 Spark 的conf目录下。2. 使用hadoop fs -ls命令测试 HDFS 连通性。3. 检查 Spark 进程是否有权限访问目标文件。5.2 开发与部署最佳实践优先使用 DataFrame/Dataset API相比 RDD API它们能享受 Catalyst 优化和 Tungsten 执行带来的性能红利且代码更简洁。避免在 Driver 端收集大量数据collect()、take(N)N很大等操作会将数据拉取到单点 Driver容易引发 OOM。尽量使用filter、aggregate在 Executor 端完成计算只将最终结果传回。持久化缓存复用多次的 RDD/DataFrame如果一个中间结果会被多次使用使用df.cache()或df.persist()将其持久化到内存或磁盘避免重复计算。合理设置分区数分区数决定了任务的并行度。太少则资源利用不足太多则任务调度开销大。可以通过repartition()或coalesce()调整。使用广播变量Broadcast Variables当需要在所有 Task 中使用一个只读的大变量如字典表时使用广播变量可以避免每个 Task 都拷贝一份显著减少网络传输和内存消耗。配置日志级别在生产环境中将 Spark 的日志级别调整为WARN或ERROR避免 INFO 日志刷屏。可以在spark-submit中通过--conf spark.driver.extraJavaOptions-Dlog4j.configurationfile:/path/to/log4j.properties指定日志配置文件。监控与调优充分利用 Spark Web UI默认 4040 端口历史服务器 18080 端口来监控作业执行情况分析各个 Stage 的时间消耗、Shuffle 数据量、GC 时间等这是性能调优的最重要依据。从理解 Spark 的“星火”架构内存计算、DAG调度到成功点燃本地环境并解决依赖问题再到通过一个完整案例掌握 RDD 和 DataFrame 两种编程范式最后了解集群部署和生产调优的轮廓这条路径旨在为你构建一个坚实且可扩展的 Spark 知识框架。真正的精通源于实践建议你接下来尝试处理更复杂的数据集如 JSON、Parquet 格式连接真实的数据源如 Hive、Kafka并深入探索 Spark Streaming 或 MLlib 等子模块将这颗“星火”应用到更广阔的数据处理场景中。

相关新闻

魔改显卡技术解析:RTX 4080扩容32GB显存的原理、风险与AI应用实测

魔改显卡技术解析:RTX 4080扩容32GB显存的原理、风险与AI应用实测

这次我们来看一个在硬件圈和AI本地部署圈都引发关注的现象:英伟达RTX 4080显卡被“魔改”成32GB显存版本,并出现在二手交易平台。对于需要大显存运行本地大模型、进行AI绘画或视频生成的用户来说,这听起来像是一个极具性价比的解决方案。但“…

2026/10/10 3:42:46 阅读更多 →
BetterGI 终极指南:原神自动化辅助工具的完整使用教程

BetterGI 终极指南:原神自动化辅助工具的完整使用教程

BetterGI 终极指南:原神自动化辅助工具的完整使用教程 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 | 自…

2026/10/4 2:47:45 阅读更多 →
Android微信机器人集成音乐播放:MediaPlayer音频焦点与后台服务实践

Android微信机器人集成音乐播放:MediaPlayer音频焦点与后台服务实践

1. 项目概述:当微信机器人“开口唱歌”最近在折腾一个挺有意思的项目:让Android上的微信机器人ClawBot能够接收指令,然后播放指定的音乐。这听起来像是把智能音箱的功能塞进了微信里,对吧?但实际做起来,你会…

2026/10/4 10:27:43 阅读更多 →

最新新闻

Muse开源SDK:AI Agent走出屏幕囚笼,迈向物理世界执行

Muse开源SDK:AI Agent走出屏幕囚笼,迈向物理世界执行

1. 从 App Store 榜首到开源 SDK:一个被多数人忽略的硬件信号“Muse 登顶 App Store 并开源 SDK”——这行标题里藏着两个被大众媒体轻描淡写、却在技术一线引发连锁震动的动作。我盯着这个消息反复看了三遍,不是因为 Muse 多么惊艳,而是因为…

2026/10/13 23:46:36 阅读更多 →
自主导航小车组装全流程:从底盘搭建到传感器安装的避坑指南

自主导航小车组装全流程:从底盘搭建到传感器安装的避坑指南

1. 从零搭建一台自主导航小车:组装环节到底在装什么很多人第一次接触自主导航项目,注意力全在算法和代码上,觉得组装无非就是拧螺丝、插线头,没什么技术含量。但实际做过几个项目之后你会发现,组装环节才是整个系统能不…

2026/10/13 23:46:36 阅读更多 →
Spring Boot整合WebMagic与MyBatis多数据源:爬虫工程化落地指南

Spring Boot整合WebMagic与MyBatis多数据源:爬虫工程化落地指南

简介:面向Java开发者的SpringBootWebMagicMybatis多数据源爬虫框架资源,适合已掌握基础爬虫或Spring Boot、希望构建企业级可扩展采集系统的学习者。资源共134个文件,涵盖java源码、class编译文件、mybatis映射xml、properties与yml配置等&am…

2026/10/13 23:46:36 阅读更多 →
Qt开发必备:QJson编译全攻略与CMake集成实战

Qt开发必备:QJson编译全攻略与CMake集成实战

1. 为什么还要折腾 QJson 的编译QJson 这个库,做 Qt 桌面开发的人多少都听过。它是一个基于 Qt 的轻量级 JSON 解析库,能把 JSON 文本直接映射成 QVariant 对象,也能把 QVariant 反向序列化成 JSON 字符串。相比 Qt 自带的 QJsonDocument&…

2026/10/13 23:46:36 阅读更多 →
Python手写线性规划求解器:大M法与两阶段法实现

Python手写线性规划求解器:大M法与两阶段法实现

简介:本资源是一套面向高校运筹学、最优化方法课程学习者及MATLAB初学者的线性规划算法实践工具包,聚焦单纯形法核心变体——大M法与两阶段法的完整程序实现。资源包含3个功能明确的MATLAB源文件(.m):main.m为主控入口…

2026/10/13 23:46:36 阅读更多 →
GNN图神经网络实战:从GCN到GAT、GraphSAGE、GIN的选型与避坑指南

GNN图神经网络实战:从GCN到GAT、GraphSAGE、GIN的选型与避坑指南

简介:这份资源是一套面向深度学习学习者与算法工程师的图神经网络系统课件,共100页PPT,适合希望从零建立GNN知识框架、或需要梳理GCN及其变体脉络的读者。内容按四部分展开:先讲为何需要GNN,对比欧式与非欧式数据的差异…

2026/10/13 23:45:36 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →