Spark 图计算ONEID 进阶版

0、环境信息

        本文采用阿里云maxcompute的spark环境为基础进行的,搭建本地spark环境参考搭建Windows开发环境_云原生大数据计算服务 MaxCompute-阿里云帮助中心

        版本spark 2.4.5,maven版本大于3.8.4

①配置pom依赖 详见2-1

②添加运行jar包

 

 ③添加配置信息

odps.project.name=
odps.access.id=
odps.access.key=
odps.end.point=

1、数据准备

create TABLE dwd_sl_user_ids(

user_name STRING COMMENT '用户'

,user_id STRING COMMENT '用户id'

,device_id STRING COMMENT '设备号'

,id_card STRING COMMENT '身份证号'

,phone STRING COMMENT '电话号'

,pay_id STRING COMMENT '支付账号'

,ssoid STRING COMMENT 'APPID'

) PARTITIONED BY (

ds BIGINT

)

;

INSERT OVERWRITE TABLE dwd_sl_user_ids PARTITION(ds=20230818)

VALUES          

('大法_官网','1','device_a','130826','185133','zhi1111','U130311')

,('大神_官网','2','device_b','220317','165133','zhi2222','')

,('耀总_官网','3','','310322','133890','zhi3333','U120311')

,('大法_app','1','device_x','130826','','zhi1111','')

,('大神_app','2','device_b','220317','165133','','')

,('耀总_app','','','','133890','zhi333','U120311')

,('大法_小程序','','device_x','130826','','','U130311')

,('大神_小程序','2','device_b','220317','165133','','U140888')

,('耀总_小程序','','','310322','133890','','U120311')

;

结果表

create TABLE itsl_dev.dwd_patient_oneid_info_df(

oneid STRING COMMENT '生成的ONEID'

,id STRING COMMENT '用户的各类id'

,id_hashcode STRING COMMENT '用户各类ID的id_hashcode'

,guid STRING COMMENT '聚合的guid'

,guid_hashcode STRING COMMENT '聚合的guid_hashcode'

)PARTITIONED BY (

ds BIGINT

);

2、代码准备

①pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gwm</groupId><artifactId>graph</artifactId><version>1.0-SNAPSHOT</version><name>graph</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spark.version>2.3.0</spark.version><java.version>1.8</java.version><cupid.sdk.version>3.3.8-public</cupid.sdk.version><scala.version>2.11.8</scala.version><scala.binary.version>2.11</scala.binary.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.11</artifactId><version>${spark.version}</version>
<!--            <scope>provided</scope>--></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>${spark.version}</version>
<!--            <scope>provided</scope>--></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-graphx_2.11</artifactId><version>${spark.version}</version>
<!--            <scope>provided</scope>--></dependency><dependency><groupId>com.thoughtworks.paranamer</groupId><artifactId>paranamer</artifactId><version>2.8</version>
<!--            <scope>provided</scope>--></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.5</version>
<!--      <scope>provided</scope>--></dependency><dependency><groupId>com.aliyun.odps</groupId><artifactId>cupid-sdk</artifactId><version>${cupid.sdk.version}</version><scope>provided</scope></dependency><!--    <dependency>--><!--      <groupId>com.aliyun.odps</groupId>--><!--      <artifactId>hadoop-fs-oss</artifactId>--><!--      <version>${cupid.sdk.version}</version>--><!--    </dependency>--><dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-spark-datasource_${scala.binary.version}</artifactId><version>${cupid.sdk.version}</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.13</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency></dependencies><!--  <build>--><!--    <pluginManagement>&lt;!&ndash; lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) &ndash;&gt;--><!--      <plugins>--><!--        &lt;!&ndash; clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle &ndash;&gt;--><!--        <plugin>--><!--          <artifactId>maven-clean-plugin</artifactId>--><!--          <version>3.1.0</version>--><!--        </plugin>--><!--        &lt;!&ndash; default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging &ndash;&gt;--><!--        <plugin>--><!--          <artifactId>maven-resources-plugin</artifactId>--><!--          <version>3.0.2</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-compiler-plugin</artifactId>--><!--          <version>3.8.0</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-surefire-plugin</artifactId>--><!--          <version>2.22.1</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-jar-plugin</artifactId>--><!--          <version>3.0.2</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-install-plugin</artifactId>--><!--          <version>2.5.2</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-deploy-plugin</artifactId>--><!--          <version>2.8.2</version>--><!--        </plugin>--><!--        &lt;!&ndash; site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle &ndash;&gt;--><!--        <plugin>--><!--          <artifactId>maven-site-plugin</artifactId>--><!--          <version>3.7.1</version>--><!--        </plugin>--><!--        <plugin>--><!--          <artifactId>maven-project-info-reports-plugin</artifactId>--><!--          <version>3.0.0</version>--><!--        </plugin>--><!--        <plugin>--><!--          <groupId>org.scala-tools</groupId>--><!--          <artifactId>maven-scala-plugin</artifactId>--><!--          <version>2.15.2</version>--><!--          <executions>--><!--            <execution>--><!--              <goals>--><!--                <goal>compile</goal>--><!--                <goal>testCompile</goal>--><!--              </goals>--><!--            </execution>--><!--          </executions>--><!--        </plugin>--><!--      </plugins>--><!--    </pluginManagement>--><!--  </build>--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.1</version><configuration><archive><manifest><mainClass>com.gwm.OdpsGraphx</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><version>2.15.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins></build>
</project>

②代码

package com.gwmimport java.math.BigInteger
import java.text.SimpleDateFormat
import java.util.Calendarimport org.apache.commons.codec.digest.DigestUtils
import org.apache.spark.SparkConf
import org.apache.spark.graphx.{Edge, Graph}
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
import org.spark_project.jetty.util.StringUtilimport scala.collection.mutable.ListBuffer/*** @author yangyingchun* @date 2023/8/18 10:32* @version 1.0*/
object OneID {val sparkConf = (new SparkConf).setAppName("OdpsGraph").setMaster("local[1]")sparkConf.set("spark.hadoop.odps.access.id", "your's  access.id ")sparkConf.set("spark.hadoop.odps.access.key", "your's  access.key")sparkConf.set("spark.hadoop.odps.end.point", "your's  end.point")sparkConf.set("spark.hadoop.odps.project.name", "your's  project.name")sparkConf.set("spark.sql.catalogImplementation", "hive") //in-memory  2.4.5以上hiveval spark = SparkSession.builder.appName("Oneid").master("local[1]").config("spark.sql.broadcastTimeout", 1200L).config("spark.sql.crossJoin.enabled", true).config("odps.exec.dynamic.partition.mode", "nonstrict").config(sparkConf).getOrCreateval sc = spark.sparkContextdef main(args: Array[String]): Unit = {val bizdate=args(0)val c = Calendar.getInstanceval format = new SimpleDateFormat("yyyyMMdd")c.setTime(format.parse(bizdate))c.add(Calendar.DATE, -1)val bizlastdate = format.format(c.getTime)println(s" 时间参数  ${bizdate}    ${bizlastdate}")// dwd_sl_user_ids 就是我们用户的各个ID ,也就是我们的数据源// 获取字段,这样我们就可以扩展新的ID 字段,但是不用更新代码val columns = spark.sql(s"""|select|   *|from|   itsl.dwd_sl_user_ids|where|   ds='${bizdate}'|limit|   1|""".stripMargin).schema.fields.map(f => f.name).filterNot(e=>e.equals("ds")).toListprintln("字段信息=>"+columns)// 获取数据val dataFrame = spark.sql(s"""|select|   ${columns.mkString(",")}|from|   itsl.dwd_sl_user_ids|where|   ds='${bizdate}'|""".stripMargin)// 数据准备val data = dataFrame.rdd.map(row => {val list = new ListBuffer[String]()for (column <- columns) {val value = row.getAs[String](column)list.append(value)}list.toList})import spark.implicits._// 顶点集合val veritx= data.flatMap(list => {for (i <- 0 until columns.length if StringUtil.isNotBlank(list(i)) && (!"null".equals(list(i))))yield (new BigInteger(DigestUtils.md5Hex(list(i)),16).longValue, list(i))}).distinctval veritxDF=veritx.toDF("id_hashcode","id")veritxDF.createOrReplaceTempView("veritx")// 生成边的集合val edges = data.flatMap(list => {for (i <- 0 to list.length - 2 if StringUtil.isNotBlank(list(i)) && (!"null".equals(list(i))); j <- i + 1 to list.length - 1 if StringUtil.isNotBlank(list(j)) && (!"null".equals(list(j))))yield Edge(new BigInteger(DigestUtils.md5Hex(list(i)),16).longValue,new BigInteger(DigestUtils.md5Hex(list(j)),16).longValue, "")}).distinct// 开始使用点集合与边集合进行图计算训练val graph = Graph(veritx, edges)val connectedGraph=graph.connectedComponents()// 连通节点val  vertices = connectedGraph.vertices.toDF("id_hashcode","guid_hashcode")vertices.createOrReplaceTempView("to_graph")// 加载昨日的oneid 数据 (oneid,id,id_hashcode)val ye_oneid = spark.sql(s"""|select|   oneid,id,id_hashcode|from|   itsl.dwd_patient_oneid_info_df|where|   ds='${bizlastdate}'|""".stripMargin)ye_oneid.createOrReplaceTempView("ye_oneid")// 关联获取 已经存在的 oneid,这里的min 函数就是我们说的oneid 的选择问题val exists_oneid=spark.sql("""|select|   a.guid_hashcode,min(b.oneid) as oneid|from|   to_graph a|inner join|   ye_oneid b|on|   a.id_hashcode=b.id_hashcode|group by|   a.guid_hashcode|""".stripMargin)exists_oneid.createOrReplaceTempView("exists_oneid")var result: DataFrame = spark.sql(s"""|select|   nvl(b.oneid,md5(cast(a.guid_hashcode as string))) as oneid,c.id,a.id_hashcode,d.id as guid,a.guid_hashcode,${bizdate} as ds|from|   to_graph a|left join|   exists_oneid b|on|   a.guid_hashcode=b.guid_hashcode|left join|   veritx c|on|   a.id_hashcode=c.id_hashcode|left join|   veritx d|on|   a.guid_hashcode=d.id_hashcode|""".stripMargin)// 不存在则生成 存在则取已有的 这里nvl 就是oneid  的更新逻辑,存在则获取 不存在则生成var resultFrame: DataFrame = result.toDF()resultFrame.show()resultFrame.write.mode(SaveMode.Append).partitionBy("ds").saveAsTable("dwd_patient_oneid_info_df")sc.stop}
}

 ③ 本地运行必须增加resources信息

3、问题解决

①Exception in thread "main" java.lang.IllegalArgumentException: Error while instantiating 'org.apache.spark.sql.hive.HiveSessionStateBuilder':

Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.hive.HiveSessionStateBuilder


缺少Hive相关依赖,增加

<dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.11</artifactId><version>${spark.version}</version><!--            <scope>provided</scope>-->
</dependency>

但其实针对odps不需要加此依赖,只需要按0步配置好环境即可

②Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: `itsl`.`dwd_sl_user_ids`; line 5 pos 3;

需要按照 0 步中按照要求完成环境准备

③Exception in thread "main" org.apache.spark.sql.AnalysisException: The format of the existing table itsl.dwd_patient_oneid_info_df is `OdpsTableProvider`. It doesn't match the specified format `ParquetFileFormat`.;

解决:ALTER TABLE dwd_patient_oneid_info_df SET FILEFORMAT PARQUET;

本地读写被禁用 需要上线解决

 4、打包上传

①需取消

 .master("local[1]")

②取消maven依赖

③odps.conf不能打包,建临时文件不放在resources下

本地测试时放resources下

参考用户画像之ID-Mapping_id mapping_大数据00的博客-CSDN博客

上线报

org.apache.spark.sql.AnalysisException: Table or view not found: `itsl`.`dwd_sl_user_ids`; line 5 pos 3;

原因是本节③

5、运行及结果

结果

oneid    id    id_hashcode    guid    guid_hashcode    ds
598e7008ffc3c6adeebd4d619e2368f3    耀总_app    8972546956853102969    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    310322    1464684454693316922    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    zhi333    6097391781232248718    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    3    2895972726640982771    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    耀总_小程序    -6210536828479319643    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    zhi3333    -2388340305120644671    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    133890    -9124021106546307510    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    耀总_官网    -9059665468531982172    133890    -9124021106546307510    20230818
598e7008ffc3c6adeebd4d619e2368f3    U120311    -2948409726589830290    133890    -9124021106546307510    20230818
d39364f7fb05a0729646a766d6d43340    U140888    -8956123177900303496    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    大神_官网    7742134357614280661    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    220317    4342975012645585979    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    device_b    934146606527688393    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    165133    -8678359668161914326    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    大神_app    3787345307522484927    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    大神_小程序    8356079890110865354    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    2    8000222017881409068    U140888    -8956123177900303496    20230818
d39364f7fb05a0729646a766d6d43340    zhi2222    8743693657758842828    U140888    -8956123177900303496    20230818
34330e92b91e164549cf750e428ba9cd    130826    -5006751273669536424    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    device_a    -3383445179222035358    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    1    994258241967195291    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    device_x    3848069073815866650    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    zhi1111    7020506831794259850    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    185133    -2272106561927942561    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    大法_app    -7101862661925406891    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    U130311    5694117693724929174    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    大法_官网    -4291733115832359573    大法_app    -7101862661925406891    20230818
34330e92b91e164549cf750e428ba9cd    大法_小程序    -5714002662175910850    大法_app    -7101862661925406891    20230818
 

6、思考

如果联通图是循环的怎么处理呢?A是B的朋友,B是C的朋友,C是A的朋友

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/95275.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】IO多路转接——poll接口

目录 poll初识 poll函数 poll服务器 poll的优点 poll的缺点 poll初识 poll也是系统提供的一个多路转接接口。 poll系统调用也可以让我们的程序同时监视多个文件描述符上的事件是否就绪&#xff0c;和select的定位是一样的&#xff0c;适用场景也是一样的。 poll函数 po…

LC-将有序数组转换为二叉搜索树

LC-将有序数组转换为二叉搜索树 链接&#xff1a;https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述&#xff1a; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索…

QT的mysql(数据库)最佳实践和常见问题解答

涉及到数据库&#xff0c;首先安利一个软件Navicat Premium&#xff0c;用来查询数据库很方便 QMysql驱动是Qt SQL模块使用的插件&#xff0c;用于与MySQL数据库进行通信。要编译QMysql驱动&#xff0c;您需要满足以下条件&#xff1a; 您需要安装MySQL的客户端库和开发头文件…

【LeetCode】字符串匹配

字符串匹配问题 常见的字符串匹配算法包括暴力匹配、 Knuth-Morris-Pratt 算法、Boyer-Moore算法、Sunday 算法等 解题 思路 1: 两个指针各指向两个字符串的起始位置,先判断,两个字符串的第一个字符是否相同,如果相同的话,则将两个指针往下移动,并且判断较短字符串的下一个字符…

el-table实现静态和动态合并单元格 以及内容显示的问题

实现效果图 <el-tablev-loading"loading":data"tableData"style"width: 100%":row-class-name"tableRowClassName"size"small"><el-table-column fixed label"序号" width"50"><el-tab…

[MySQL] — 数据类型和表的约束

目录 数据类型 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 float decimal 字符串类型 char varchar char和varchar的区别 日期和时间类型 enum 和 set 表的约束 空属性 默认值 列描述 zeorfill 主键 创建表时在字段上指定主键 删除主键&#xff1a; 追…

Spring Bean的生命周期总结(包含面试题)

目录 一、Bean的初始化过程 1. 加载Spring Bean 2. 解析Bean的定义 3. Bean属性定义 4. BeanFactoryPostProcessor 扩展接口 5. 实例化Bean对象 6. Aware感知 7. 初始化方法 8. 后置处理 9. destroy 销毁 二、Bean的单例与多例模式 2.1 单例模式&#xff08;Sin…

Codeforces Round 893 (Div. 2)B题题解

文章目录 [The Walkway](https://codeforces.com/contest/1858/problem/B)问题建模问题分析1.分析所求2.如何快速计算每个商贩被去除后的饼干数量代码 The Walkway 问题建模 给定n个椅子&#xff0c;其中有m个位置存在商贩&#xff0c;在商贩处必须购买饼干吃&#xff0c;每隔…

由于找不到d3dx9_43.dll无法继续执行代码怎么解决

我们在安装PS&#xff0c;吃鸡等软件跟游戏的时候&#xff0c;有可能安装完之后出现以下问题&#xff08;特别是win7或者win8系统&#xff09; 错误&#xff1a; 打开PS或者吃鸡等游戏的时候出现这个错误&#xff1a;无法启动此程序&#xff0c;因为计算机中丢失d3dx9_43.dll。…

4. 软件开发的环境搭建

目录 1. 搭建环境 1.1 检查 JDK 1.2 检查 MySQL 数据库 1.3 检查 Maven 1.4 检查 GITEEGIT 1.5 安装插件 1.5.1 安装 Spring Boot Helper 1.5.2 安装 lombok 1.6 创建仓库 1.6.1 登录 GITEE 创建仓库并复制仓库地址 1.6.2 克隆到本地 1.7 创建工程 1.7.1 设置编码…

应用层自定义协议(组织数据的格式)

概念 在进行网络传输数据的时候&#xff0c;通常是将要传输的数据组织成一个字符串&#xff0c;再将字符串转换为一个字节流进行网络传输数据&#xff0c;而数据组织的格式是多种多样的&#xff0c;我们只需要保证&#xff0c;客户端和服务器对于字符串的组织和解析统一即可 现…

数据结构的树存储结构

数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …

TDD(测试驱动开发)?

01、前言 很早之前&#xff0c;曾在网络上见到过 TDD 这 3 个大写的英文字母&#xff0c;它是 Test Driven Development 这三个单词的缩写&#xff0c;也就是“测试驱动开发”的意思——听起来很不错的一种理念。 其理念主要是确保两件事&#xff1a; 确保所有的需求都能被照…

corosync+pacemaker+nfs配置简单高可用

环境准备&#xff1a; 每个节点提供20G共享存储 web1192.168.134.176node7web2192.168.134.177node8 一、准备web环境&#xff08;两台web测试机都要准备&#xff09; yum install httpd -y echo " web test page ,ip is hostname -I." > /var/www/html/index…

利用logstash/filebeat/插件,将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

ROS机器人启动move base时代价地图概率性无法加载的原因及解决方法

最近&#xff0c;使用ROS机器人&#xff0c;在启动move_base 节点时&#xff0c;概率性会出现全局和局部代价地图不加载的问题&#xff0c;此时&#xff0c;发布目标点也无法启动路径规划。而且该问题有时候出现概率很低&#xff0c;比如启动10次&#xff0c;会有1次发送该情况…

进行 200 瓦太阳能 (PV) 模块设计以测量太阳能光伏阵列的电压、电流和功率、综合负荷频率和电压控制系统的方法研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

构建可远程访问的企业内部论坛

文章目录 前言1.cpolar、PHPStudy2.Discuz3.打开PHPStudy&#xff0c;安装网页论坛所需软件4.进行网页运行环境的构建5.运行Discuz网页程序6.使用cpolar建立穿透内网的数据隧道&#xff0c;发布到公网7.对云端保留的空白数据隧道进行配置8.Discuz论坛搭建完毕 前言 企业在发展…

Beats:使用 Filebeat 将 golang 应用程序记录到 Elasticsearch - 8.x

毫无疑问&#xff0c;日志记录是任何应用程序最重要的方面之一。 当事情出错时&#xff08;而且确实会出错&#xff09;&#xff0c;我们需要知道发生了什么。 为了实现这一目标&#xff0c;我们可以设置 Filebeat 从我们的 golang 应用程序收集日志&#xff0c;然后将它们发送…

matlab RANSAC拟合多项式曲线

目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人。爬些不完整的误导别人有意思吗???? 一、功能概述 1、算法概述 使用RANSAC对点进行多项式拟合。