spark structuredstreaming 多流 写入kafka

【秒懂StructuredStreaming】StructuredStreaming是何方神圣 目录 一、为何要有StructuredStreaming 二、StructuredStreaming的特性 1、结构化流式处理 2、基于Event-Time聚合&延迟数据处理 3、容错性 Structured Streaming是Spark新提出的一种实时流的框架,以前是Spark Streaming。那么这两者有什么区别呢,为什么有了Spark Streaming,还要提出S... 阅读详情

需求:

存在一张离线规则表A,A 中存在两列 gid(规则id),gsql(规则sql) ,一份实时数据,搜索出实时数据中符合规则的数据

A 中数据格式如下:

gidgsql
202column0=0.0 and column6>0
201 column0=0.0 and column7>10.0

 

 

 

 

实时数据格式如下

timestamptagvalue
2021-03-18 20:11:530.0,0.0,0.0,0.0,1529.0,8472.0,0.932982,56.0,-0.35992295,0.0,0.0

 

 

 

现在需要查出实时数据中符合规则的数据:

val session: SparkSession = SparkSession.builder()
      .master("local[*]")
      .appName("testAnalysis")
      .config("hive.metastore.uris", "thrift://172.17.3.205:9083")
      .config("spark.sql.warehouse.dir", "hdfs://172.17.3.205:8020/apps/hive/warehouse")
      .config("spark.debug.maxToStringFields","200")
      .enableHiveSupport().getOrCreate()

    val source: DataFrame = session
      .readStream
      .format("org.apache.spark.sql.execution.streaming.ConsumerSocketSourceProvider")
      .option("host",host)
      .option("port","5002")
      //.option("sendCode",createSendCode(datatype,start.toInt,length.toInt))
      .option("sendCode","3E2A07D10000000B")
      .option("dataType",datatype)
      .option("proppath",path)
      .option("includeTimestamp",true)
      .load()

    source.isStreaming
    source.printSchema()

  val frame1: DataFrame = session.sql("select *  from xiaojihan.f_gz_test")
    frame1.cache()

    import session.implicits._
    val tuples: Array[(String, String)] = frame1.map(row => {
      val string: String = row.get(8).toString
      (row.get(1).toString, s"select * from tmp_aa where $string")
    }).collect()

    /**
     * 把 一个由,分隔的一列数据变成多列
     */
    val frame2: DataFrame = source.dropDuplicates()
      .withColumn("columns", split(col("tagvalue"), ","))
      .select(col("timestamp") +: Range(0, length, 1).map(
        i => {
          col("columns").getItem(i).alias(s"column$i")
        }
      ): _*)

    /**
     * 当对同一个流数据存在多个分支操作的时候使用临时表
     */
     frame2.createOrReplaceTempView("tmp_aa")

    /**
     * 当存在多个流时应该先启动起来,如果之间在start 之后跟.awaitTermination()会阻塞第二个分支Query的执行
     * 所以 应当先全部启动之后使用 session.streams.awaitAnyTermination()
     */
    for(i<-0 to tuples.length-1){
        session.sql(tuples(i)._2)
        .withColumn("id", lit(tuples(i)._1))
        .select(to_json(struct("*")).alias("value"))
          .writeStream.format("kafka")
          .option("kafka.bootstrap.servers", boostrap)
          .option("checkpointLocation", checkpointdir+s"$i")
          .option("topic", topic).start()
    }

    session.streams.awaitAnyTermination()
    
  }

错误说明:

1.如果写成:

session.sql(tuples(i)._2)
.withColumn("id", lit(tuples(i)._1))
.select(to_json(struct("*")).alias("value"))
  .writeStream.format("kafka")
  .option("kafka.bootstrap.servers", boostrap)
  .option("checkpointLocation", checkpointdir+s"$i")
  .option("topic", topic).start().awaitTermination()

将永远只能看见一个规则id的数据,多个流数据进行写入时,应该先启动所用流数据,再进行等待阻塞

session.streams.awaitAnyTermination()

2.当多个流数据写入一个checkpoint 目录时会出现如下错误(注,checkpoint 目录会自己创建,所以在开启循环写入多个流时并不需要自己创建)

org.apache.spark.SparkException: Writing job aborted.
    at org.apache.spark.sql.execution.datasources.v2.WriteToDataSourceV2Exec.doExecute(WriteToDataSourceV2.scala:112)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:131)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:127)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:155)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
    at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:152)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:127)
    at org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:247)
    at org.apache.spark.sql.execution.SparkPlan.executeCollect(SparkPlan.scala:294)
    at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collectFromPlan(Dataset.scala:3272)
    at org.apache.spark.sql.Dataset$$anonfun$collect$1.apply(Dataset.scala:2722)
    at org.apache.spark.sql.Dataset$$anonfun$collect$1.apply(Dataset.scala:2722)
    at org.apache.spark.sql.Dataset$$anonfun$52.apply(Dataset.scala:3253)
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:77)
    at org.apache.spark.sql.Dataset.withAction(Dataset.scala:3252)
    at org.apache.spark.sql.Dataset.collect(Dataset.scala:2722)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch$3$$anonfun$apply$16.apply(MicroBatchExecution.scala:480)
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:77)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch$3.apply(MicroBatchExecution.scala:475)
    at org.apache.spark.sql.execution.streaming.ProgressReporter$class.reportTimeTaken(ProgressReporter.scala:271)
    at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:58)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution.org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch(MicroBatchExecution.scala:474)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply$mcV$sp(MicroBatchExecution.scala:133)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply(MicroBatchExecution.scala:121)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply(MicroBatchExecution.scala:121)
    at org.apache.spark.sql.execution.streaming.ProgressReporter$class.reportTimeTaken(ProgressReporter.scala:271)
    at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:58)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1.apply$mcZ$sp(MicroBatchExecution.scala:121)
    at org.apache.spark.sql.execution.streaming.ProcessingTimeExecutor.execute(TriggerExecutor.scala:56)
    at org.apache.spark.sql.execution.streaming.MicroBatchExecution.runActivatedStream(MicroBatchExecution.scala:117)
    at org.apache.spark.sql.execution.streaming.StreamExecution.org$apache$spark$sql$execution$streaming$StreamExecution$$runStream(StreamExecution.scala:279)
    at org.apache.spark.sql.execution.streaming.StreamExecution$$anon$1.run(StreamExecution.scala:189)
Caused by: org.apache.spark.SparkException: Job 1 cancelled because SparkContext was shut down

21/03/18 20:56:47 INFO HDFSBackedStateStoreProvider: Committed version 1 for HDFSStateStore[id=(op=0,part=4),dir=hdfs://172.17.3.205:8020/tmp/checkpoint/state/0/4] to file hdfs://172.17.3.205:8020/tmp/checkpoint/state/0/4/1.delta
21/03/18 20:56:47 INFO DataWritingSparkTask: Writer for partition 4 is committing.
21/03/18 20:56:47 INFO DataWritingSparkTask: Writer for partition 4 committed.
21/03/18 20:56:47 INFO Executor: Finished task 4.0 in stage 2.0 (TID 12). 2165 bytes result sent to driver
21/03/18 20:56:47 ERROR TaskSchedulerImpl: Exception in statusUpdate
java.util.concurrent.RejectedExecutionException: Task org.apache.spark.scheduler.TaskResultGetter$$anon$3@24be81f rejected from java.util.concurrent.ThreadPoolExecutor@2a26287b[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 12]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
    at org.apache.spark.scheduler.TaskResultGetter.enqueueSuccessfulTask(TaskResultGetter.scala:61)
    at org.apache.spark.scheduler.TaskSchedulerImpl.liftedTree2$1(TaskSchedulerImpl.scala:413)
    at org.apache.spark.scheduler.TaskSchedulerImpl.statusUpdate(TaskSchedulerImpl.scala:394)
    at org.apache.spark.scheduler.local.LocalEndpoint$$anonfun$receive$1.applyOrElse(LocalSchedulerBackend.scala:67)
    at org.apache.spark.rpc.netty.Inbox$$anonfun$process$1.apply$mcV$sp(Inbox.scala:117)
    at org.apache.spark.rpc.netty.Inbox.safelyCall(Inbox.scala:205)
    at org.apache.spark.rpc.netty.Inbox.process(Inbox.scala:101)
    at org.apache.spark.rpc.netty.Dispatcher$MessageLoop.run(Dispatcher.scala:221)
    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)

3. 如果把流表写入到内存表之后命名为xiaojihan.tt,直接对frame1 进行循环,使用session 对 流表进行查询,会出现根本没有结果,甚至报错。

 第一,session 不可序列化,session 是在driver 端进行创建的,然后driver 端会根据算子之间的宽窄依赖去划分stage,然后stage 会根据partition 划分出taskset(包含partition 个task),task 是被发送到exector 中进行运行的

见这个:https://bbs.youkuaiyun.com/topics/392176755

第二:当job 被写入内存表之后,内存表只能show,想要把结果保存到外部文件不好用(没有找到原因)

 frame1.foreachPartition(irow => {
      irow.foreach(row => {
          val string: String = row.get(8).toString
        session.sql(s"select * from xiaojihan.tt where $string").show()

      }
      )
    })

参考博客:

https://www.jianshu.com/p/91d4a61e1461

https://stackoverflow.com/questions/62155006/spark-writestream-into-kafka-difference-between-awaittermination-vs-awaitany


 

 

Spark消费Kafka数据按日期写入Hdfs 需求:将同一天的数据写入到同一个文件中,文件以当天日期命名。 版本:spark 2.2.0,hadoop 3.0.0,scala 2.11 实现: 1)pom.xml <dependencies> <dependency> <groupId>org.apache.spark</groupId> ... 阅读详情

相关推荐

Spark+Kafka构建实时分析Dashboard

Spark+Kafka构建实时分析Dashboard,使用的是林子雨老师的教程,在这里记录下我实验的过程

无 3941

SPARK本地启动失败

使用本地 kafka 获取流数据计算时,并输出计算结果到本地console出错 输出代码 StreamingQuery query = strRs.writeStream() .outputMode("update") .format("console") .trigger(Trigger.ProcessingTime(Duration.apply(batchDuration, TimeUnit.SECONDS)

alvin_010的博客 1095

关于 structuredstreaming消费kafka中的异常汇总

本人的spark是2.2.4的,kafka是0.10的,遇到了以下问题,后续会持续更新 1、Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, Failed to find data source: kafka. Please find pac...

qq_40651753的博客 1799

大数据Spark Structured Streaming集成 Kafka

目录1 Kafka 数据消费2 Kafka 数据源3 Kafka 接收器3.1 配置说明3.2 实时数据ETL架构3.3 模拟基站日志数据3.4 实时增量ETL4 Kafka 特定配置 1 Kafka 数据消费 Apache Kafka 是目前最流行的一个分布式的实时流消息系统,给下游订阅消费系统提供了并行处理和可靠容错机制,现在大公司在流式数据的处理场景,Kafka基本是标配。StructuredStreaming很好的集成Kafka,可以从Kafka拉取消息,然后就可以把流数据看做一个DataFram

赵广陆 1356

spark/flink + kafka 是如何做到 exactly once的?

端到端Exactly Once的含义就是:Source的每条数据会被处理有且仅有一次,并且输出到Sink中的结果不重不丢。 Flink和Spark structure streaming能否做到端到端的exactly once?是可以的。由于原理类似,接下来拿spark举例分析一下。 kafka有关详细内容请看: KIP-98 - Exactly Once Delivery and Transactional Messaging - Apache Kafka - Apache Software Fou

fenglei0415的博客 2295

【Spark编程基础】实验5 Spark Structured Streaming编程实践

0.1 讲义文件源-json数据任务。按照讲义中json数据的生成及分析,复现实验,并适当分析。0.2 讲义kafka源,2字母单词分析任务按照讲义要求,复现kafka源实验。0.3 讲义socket源,结构化流实现词频统计。按照讲义要求,复现socket源实验。0.4(不选)使用rate源,评估系统性能。

Lenhart001的博客 5157

求助帖:我在spark的structured streaming进行流计算,想要将每个批次的结果自定义写入hdfs文件中,但是报错无法序列化。

求助帖:我在spark的structured streaming进行流计算,想要将每个批次的结果自定义写入hdfs文件中,但是报错无法序列化。 自定义写文件代码如下: val query = sessionUpdates.writeStream.outputMode(“update”).foreach(new ForeachWriter[NewSessionUpdate] { var batchCount = 0 val conf = new Configuration() conf.set("

a997002636的博客 605

Spark实时(二):StructuredStreaming编程模型

对于流式数据处理时,我们更希望使用事件时间evnet time来对数据进行窗口划分,事件时间一般嵌入到数据本身,是数据中的一个列,例如:Iot设备产生实时数据时,我们对这些数据进行处理时,我们希望使用事件产生的时间,即:event time,而不希望使用Spark接收这些事件的时间进行窗口划分数据分析。此外,Structured Streaming 基于事件时间处理数据时还支持对延迟数据的处理,当有延迟数据到达时,Structured Streaming可以基于事件时间找到对应的窗口对数据进行更新。

Lansonli(蓝深李)的博客 1650

Spark排错与优化

文章目录 一. 运维 1. Master挂掉,standby重启也失效 2. worker挂掉或假死 二. 运行错误 1.shuffle FetchFailedException 2.Executor&amp;Task Lost 3.倾斜 4.OOM 5.task not serializable 6.driver.maxResultSize太小 7.taskSet too large 8. dr...

小丑鱼1127的博客 7008

Spark(51) -- StructuredStreaming集成 Kafka

1. Kafka 数据消费 2. Kafka 数据源 3. Kafka 接收器 3.1 配置说明 3.2 实时数据ETL架构 3.3 模拟基站日志数据 3.4 实时增量ETL 4. Kafka 特定配置

erainm 374

schrodinger 薛定谔

链接: https://pan.baidu.com/s/1Duh4GsoytIklvZp7TdHpWg 密码: wmr1 Linux系统版 进入 Schrodinger_Suites_2021-2_Linux-x86_64 sudo ./INSTALL 中间按默认的来即可,也可以自己调整安装目录。安装目录一定要记住。 安装完,把patcher 拷贝到安装目录 sudo ./patcher 点击Patch即可。 启动程序,进入安装目录 ./maestro ...

周迪新的博客 1万+

[转]Spark Structured Streaming + Kafka使用笔记

这篇博客将会记录Structured Streaming + Kafka的一些基本使用(Java 版) spark 2.3.0 1. 概述 Structured Streaming (结构化流)是一种基于 Spark SQL 引擎构建的可扩展且容错的 stream processing engine (流处理引擎)。可以使用Dataset/DataFrame API 来表示 streaming aggregations (流聚合), event-time windows (事件...

dingyufei的博客 1453

ArcGIS小白必看:5分钟搞定shp矢量文件分割(附常见错误排查)

本文为ArcGIS新手详细解析了分割shp矢量文件的四种核心方法:裁剪工具、分割工具、按属性选择导出及ArcPy脚本自动化。重点强调了投影匹配等关键步骤,并提供了常见错误排查指南,帮助用户快速掌握矢量数据分割技巧,提升GIS数据处理效率。

h9j8k7l6m5n的博客 798

震惊!StructuredStreaming整合Kafka和MySQL原来这么简单?

        上一篇博客博主已经为大家从发展史到基本实战为大家详细介绍了StructedStreaming(具体请见:《看了这篇博客,你还敢说不会Structured Streaming?》)。本篇博客,博主将紧随前沿,为大家带来关于StructuredStreaming整合Kafka和MySQL的教程。         码字不易,先赞后看,养成习

大数据梦想家 1万+

手把手教你用ADIsimCLK和GUI搞定HMC7044时钟配置(附避坑指南)

本文详细解析了HMC7044时钟芯片的配置方法,通过ADIsimCLK和HMC7044 Configuration GUI工具,从频率规划到硬件验证全流程实战演示。特别针对PLL模式选择、分频链配置等易错环节,提供量产验证的配置模板和实测数据,帮助工程师快速掌握高性能时钟解决方案。

weixin_30755393的博客 806

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

StructuredStreaming知识总结

零基础学SparkStructuredStreaming

默主归沙的博客 1336

18. 从 SAP Fiori Elements List Report 中的图片显示,谈谈背后的 XML Template 设计机制

至此,Fiori Elements List Report 这个模版里,图片显示的原理,笔者已经从开发人员层面需要定义的注解,和 Fiori Elements 框架层面如何解析这些注解,这两方面做了深入介绍。从本文开始,我们从 Fiori Elements 预制的标准 XML Template 模版的设计,来介绍我们在最终 Fiori Elements 页面看到的产品图标,是如何渲染出来的。但是,List Report 里产品的图标显示,到底是上面这些 XML 文件里的哪一个里定义的呢?

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 607

StructuredStreaming整合Kafka

StructuredStreaming整合Kafka 官网介绍 http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html 整合环境准备 ●启动kafka /export/servers/kafka/bin/kafka-server-start.sh -daemon /export/servers...

汉子一枚 1564

华为od 面试八股文_JAVA语言_01_含答案

华为od 面试八股文_JAVA语言_01_含答案

MISAYAONE的博客 4311

[知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例

2012年5月,谷歌公司的知识图谱(Knowledge Graph)产品被正式提出,其旨在将人、地点、物等信息作为实体,将实体间的联系作为关系,并将实体和关系以图的形式进行存储。作为语义网的最新产物,知识图谱这种新型的搜索引擎改变了传统的文本搜索结果,而随后国内公司也开发出了相应产品,例如百度公司的“知心”和搜狗公司的“知立方”等。知识图谱本质上属于一种语义网。知识图谱中的每一条数据或事实一般会采用 &amp;lt;实体,属性,属性值&amp;gt; &amp;lt;实体, 关系,

杨秀璋的专栏 1万+

StructuredStreaming与Kafka整合案例(pyspark版本)

Apache Kafka 是目前最流行的一个分布式的实时流消息系统,给下游订阅消费系统提供了并行处理和可靠容错机制现在大公司在流式数据的处理场景,Kafka基本是标配。

二进制专栏 965

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

StructuredStreaming整合kafka&Mysql

前言 大家好,我是DJ丶小哪吒,我又来跟你们分享知识了。小编是一名软件工程系大数据应用开发专业大二的学生,对软件开发有着浓厚的兴趣。喜欢与人分享知识。做博客的目的就是为了能与 他 人知识共享。最近小编也在学习spark,对课堂上的内容做了一些总结。来与大家分享。由于水平有限。博客中难免会有一些错误。如有 纰 漏之处,欢迎大家在留言区指正。小编也会及时改正。 DJ丶小哪吒续更了。上回简单带领大家简单了解了一下StructuredStreaming,那么这一回,我们就来使用StructuredStream.

Mr_Yang888的博客 746

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Debezium:Spark Structured Streaming将Kafka的数据写入ElasticSearch

前言: 1、数据流 Mysql -&gt; Debezium -&gt; Kafka -&gt; Structured Streaming -&gt;ElasticSearch 2、Mysql -&gt; Debezium -&gt; Kafka 参考 https://blog.csdn.net/u012551524/article/details/84258565 3、ES/Spar...

高矮 2706

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Waterdrop推动Spark Structured Streaming走向生产环境

前言 StructuredStreaming是Spark 2.0以后新开放的一个模块,相比SparkStreaming,它有一些比较突出的优点: 它能做到更低的延迟; 可以做实时的聚合,例如实时计算每天每个商品的销售总额; 可以做流与流之间的关联,例如计算广告的点击率,需要将广告的曝光记录和点击记录关联。 以上几点如果使用SparkStreaming来实现可能会比较麻烦或者说是很难实现,但是使...

Ricky点滴 1320

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: impala 自定义函数
下一篇: 大数据面经持续更新
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值