- 基于Spark的云南旅游大数据分析平台
Sweican
毕业设计spark大数据分布式
一、项目概述Hi,大家好,今天分享的项目是《基于Spark的云南旅游大数据分析平台》。随着旅游业的发展和数字化进程的加速,智慧旅游已成为旅游业的重要发展方向。智慧旅游大数据平台的建设,能够为旅游业提供更加高效、智能的数据处理和分析能力,帮助旅游企业更好地了解市场需求、优化资源配置。平台将互联网采集的有关云南旅游信息的数据,结合Spark对数据进行过滤分析和可视化,最终实现了一个对云南旅游数据进行分
- hivesql 练习3
小涛手记
hivehivesql大数据
--源表name,subjectid,age,score张三,0001,22,45张三,0002,22,56李四,0002,18,88赵五,0002,24,66--目标表(科目0001没有成绩的学生name和age)name,age李四,18赵五,24createtablescore_t(namestring,subjectidstring,agestring,scorestring)ROWFOR
- hivesql练习
小涛手记
hivehivesql
源表:province,province_id,city,city_id,area,area_id甘肃省,11,张掖市,21,甘州区,31甘肃省,11,张掖市,21,山丹县,32甘肃省,11,张掖市,21,高台县,33甘肃省,11,兰州市,22,七里河,34甘肃省,11,兰州市,22,新区,35北京,12,北京,12,海淀区,36北京,12,北京,12,昌平区,37目标表:+------+----
- Hive SQL练习之影评案例
软件手
Hivemysqlhivehadoopsql大数据
找的练习hive,内容非原创链接https://www.cnblogs.com/frankdeng/p/9309668.html一、建表,导入数据1、建表[root@masterhadoop]#hiveLogginginitializedusingconfigurationinjar:file:/usr/local/src/apache-hive-1.2.2-bin/lib/hive-common
- Python使用pyhive库远程操作hive的配置和使用
玩家_名狱
Python学习大数据python数据库hive
请先安装好hive,林子雨老师的配置方法,该配置方法是可以配置成功的,请注意配置hive-site.xml文件的时候,里面添加的信息都是在标签里的尾部添加配置hive环境到hive安装的conf目录下,把hive-env.sh.template复制一份并改名为hive-env.shcd/usr/local/hive/conf/cphive-env.sh.templatehive-env.sh然后配
- python利用pyhive 连接hive
Leonban
《Python基础知识》pythonhive大数据
1.下载需求包pipinstallsaslpipinstallthriftpipinstallthrift-saslpipinstallPyHive2.连接hive注意端口默认为10000frompyhiveimporthiveconn=hive.Connection(host='192.168.100.100',port=10000,username='root',database='defau
- python连接hive--Pyhive
Elvis_hui
hivehivepythonsql
Pyhive安装包pipinstallsaslpipinstallthriftpipinstallthrift-saslpipinstallPyHive#安装对应的包sasl可能会报错#下载sasl文件sasl下载执行语句第一种frompyhiveimporthivedefselect_pyhive(sql):#创建hive连接conn=hive.Connection(host='##',port
- pyhton - PyHive
凌不了云
pythonpythonhive
简介PyHive是一组PythonDB-API和SQLAlchemy接口,可用于Presto和Hive。它为Python提供了一个与Presto和Hive进行交互的平台,使得数据分析师和工程师可以更方便地进行数据处理和分析。安装在安装PyHive之前,你需要确保已经安装以下软件:PipPythonJDK(JavaDevelopmentKit)Hive或Presto在安装完成上述软件之后,你可以使用
- Spark SQL 结构化数据处理流程及原理是什么?
我想去吃ya
sparksqlhive数据库大数据
SparkSQL结构化数据处理流程及原理是什么?SparkSQL可以使用现有的Hive元存储、SerDes和UDF。它可以使用JDBC/ODBC连接到现有的BI工具。有了SparkSQL,用户可以编写SQL风格的查询。SparkSQL是Spark生态系统中处理结构化格式数据的模块。它在内部使用SparkCoreAPI进行处理,但对用户的使用进行了抽象。这篇文章深入浅出地告诉你SparkSQL3.x
- Ubuntn安装Xfce桌面环境
c12th
实用小技巧分享服务器经验分享ubuntu
原文:https://blog.c12th.cn/archives/11.html前言最近搞了台云服务器(2H2G)玩玩,其实一直想挂一些奇奇怪怪的东西到服务器?就装了Xfce,搭了个vnc来实现远程桌面。服务器系统为Ubuntu-20.04原教程源自Mintimate大佬效果展示教程准备工作去服务器安全组放行5901端口准备SSH连接工具或在宝塔终端连接服务器更新依赖包#更新/重载源sudoap
- 解决Butterfly主题图标不显示问题
c12th
实用小技巧分享经验分享其他
文章目录原文:https://blog.c12th.cn/archives/4.html前言解决方法主题4.3.0及以上主题4.2.0及以上方法之一主题4.2.0以下方法一(不推荐)方法二(推荐)补充原文:https://blog.c12th.cn/archives/4.html前言五天前jsdelivr突然不能用了,导致一些借助cdn加速的资源也用不了了,现在jsdelivr也是属于不稳定的状态
- 简单的PHP订单小程序
董.
php小程序chrome
HTML代码项目数量轮胎汽油火花塞收货地址PHP代码这是Bob的订单详情Bob的订单订单结果订单处理时间不知道";echo"订单处理结果如下:";$totalqty=0;#总数$totalamount=0.0;#总金额define('TIREPRICE',100);#轮胎单价define('OILPRICE',50);#油耗单价define('SPARKPRICE',20);#火花单价$docum
- halo主题开发环境搭建
该账号已被封禁丨
halo
halo主题开发环境搭建|LogDicthttps://www.logdict.com/archives/halozhu-ti-kai-fa-huan-jing-da-jian
- tar命令解压报错“Error is not recoverable: exiting now”
Yana.com
Linux系统运维问题解决服务器
tar命令解压报错:gzip:stdin:invalidcompresseddata--formatviolatedtar:UnexpectedEOFinarchivetar:UnexpectedEOFinarchivetar:Errorisnotrecoverable:exitingnow当使用tarxf命令解压文件时,如果出现"Errorisnotrecoverable:exitingnow"
- Gulp入门个人总结
薰衣草smile
Gulp入门个人总结参考资料:http://www.ydcss.com/archives/18http://www.techug.com/gulphttp://www.browsersync.cn/一.安装前提条件:已安装nodeJS*所有绿色带下划线均为指令在命令行下操作选装cnpm:受国内网络影响,设在国外的npm服务器在国内访问有可能出现异常,所以可选淘宝团队构建的cnpm来代替npm指令。
- 常用ES查询DSL语句
攻城狮Kevin
ElasticSerachES
1.针对hive表中jsonObject类型的String数据mapping中定义如下:"esf_room":{"type":"text","fields":{"keyword":{"type":"keyword"}},"norms":false},DSL查询语句如下:GET/hdp_teu_dia_face_smart_muid_20191111/_search{"query":{"bool":
- PySpark操作DataFrame常用方法
百流
PySpark使用笔记sparkpython大数据
文章目录PYSPARKDataFrame操作.na1.`drop()`2.drop(subset)3.fill(value,subset)4.replac(to_replace,value,subset)colwithColumns()when()otherwise()replace(str,search,replace)Row对象StructType,StructField,数据类型Struct
- hive中的分区
百流
hadoop学习日记hivehadoop数据仓库
文章目录Hive分区1.简介为什么要分区如何分区以及细节2.Hive分区的建立创建分区静态分区动态分区启动动态分区功能多分区单分区区别创建多分区插入分区查看分区数查看表结构Hive分区1.简介Hive分区的概念与传统关系型数据库分区不一样。传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区。Hive的分区方式:因为Hive实际是存储在
- linux网络流程分析(一)---网卡驱动
wang603603
linuxlinux
转载:https://www.cnblogs.com/gogly/archive/2012/06/10/2541573.html分析linux网络的书已经很多了,包括《追踪LinuxTCP/IP代码运行》《Linux内核源码剖析——TCP/IP实现》,这里我只是从数据包在linux内核中的基本流程来分析,尽可能的展现一个主流程框架。内核如何从网卡接收数据,传统的过程:1.数据到达网卡;2.网卡产生
- 关于vue2运行时filemanager-webpack-plugin报错isFile is undefind
又写了一天BUG
webpack前端node.js
当我们在运行时报此错误时,在vue.config.js里找一下filemanager-webpack-plugin的配置路径。newFileManagerPlugin({onEnd:{delete:['./dist.zip'],archive:[{source:'./dist',destination:'./dist.zip'}]}})在对应的路径下建一个dist文件夹
- sql-函数
weixin_45925478
SQLsqlhive
SQL函数及报错问题合集一、sql函数1.日期函数(**Hive**)1.1日期减少函数:date_sub1.2日期增加函数:date_add1.3日期格式转化函数:date2datekey/datekey2date2.字段去重2.1单字段去重(distinct)2.2多字段去重3.众数计算4.casewhen两种方式比较5.排名函数6.窗口函数二、sql报错1.重复嵌套聚合一、sql函数1.日期
- Hive3:列注释、表注释等乱码解决方案
生产队队长
HIVEhive
--在Hive的MySQL元数据库中执行usehive;1).修改字段注释字符集altertableCOLUMNS_V2modifycolumnCOMMENTvarchar(256)charactersetutf8;2).修改表注释字符集altertableTABLE_PARAMSmodifycolumnPARAM_VALUEvarchar(4000)charactersetutf8;3).修改分
- 常见的实时数仓方案
北极冰雨
大数据大数据
常见的实时数仓架构有三种。第一种是Lambda架构,是目前主流的一套实时数仓架构,存在离线和实时两条链路。实时部分以消息队列的方式实时增量消费,一般以Flink+Kafka的组合实现,维度表存在关系型数据库或者HBase;离线部分一般采用T+1周期调度分析历史存量数据,每天凌晨产出,更新覆盖前一天的结果数据,计算引擎通常会选择Hive或者Spark。优点是数据准确度高,不易出错;缺点是架构复杂,运
- hive中的数据同步到hbase
流~星~雨
大数据相关hivehbasehadoop
hive中的数据同步到hbase工作中遇到了这个工作,就是将hive中的数据同步到hbase中,然后java通过hbase相关的API来访问hbase中的数据。关于hadoop,hive,hbase这三个技术栈我写了两篇博客简单的分享了我对这三个技术栈的一些看法,在我目前的认知里,hadoop提供hdfs这个组件来存储大数据量的数据(相比于mysql,oracle这些关系型数据库),然后提供了Ma
- HIVE 数据模型
HFDYCYY
大数据
体系结构:元数据/HQL的执行安装:嵌入/远程/本地管理:CLI/web界面/远程服务数据类型:基本/复杂/时间数据模型:数据存储/内部表/分区表/外部表/桶表/视图WEB管理工具:http://tdxy-bigdata-04:8889/notebook/editor?type=hive集群状态管理:http://tdxy-bigdata-03:7180/cmf/home基于HDFS没有专门的数据
- Hive 数据模型切换后的数据验证方案
小菜菜1223
Hivehive
记录这样一个场景,cdp/dmp等等标签模型系统,会出现这样一种情况。标签系统一般属于ads集市层加工的模型数据,如果上游(数仓/业务)表进行了切换,比如我们项目最近上游从fdl/gdl切换到了dwd/dws,切换完毕后的数据一般都会出现问题,如何进行数据验证是一个需要好好思考的问题。首先,如果把切换后的结果表当成左表去匹配切换前的结果表,很容易出现因未验证语法不正确导致的数据验证问题,例如:切换
- Mysql 查询数据库或数据表中的数据量以及数据大小_mysql 获取查询记录的 数据大小
m0_74932057
程序员mysql数据库
许多数据库的元数据都是存储在mysql中的,例如hive、startrockes,因此可以通过mysql中的“information_schema.TABLES”表来查询对应数据库或对应数据表的具体信息。1、查询各个数据库中的数据条数和数据大小SELECTTABLE_SCHEMAAS'数据库',sum(table_rows)AS'记录数',sum(TRUNCATE(data_length/1024
- Spark MLlib 数据预处理-特征变换
weixin_33841722
大数据人工智能scala
2019独角兽企业重金招聘Python工程师标准>>>Tokenizer(分词器)算法介绍:Tokenization将文本划分为独立个体(通常为单词)。RegexTokenizer基于正则表达式提供更多的划分选项。默认情况下,参数“pattern”为划分文本的分隔符。或者可以指定参数“gaps”来指明正则“patten”表示“tokens”而不是分隔符,这样来为分词结果找到所有可能匹配的情况。调用
- spark应用程序转换_4.Spark特征提取、转换和选择 - 简书
weixin_39956182
spark应用程序转换
在实际机器学习项目中,我们获取的数据往往是不规范、不一致、有很多缺失数据,甚至不少错误数据,这些数据有时又称为脏数据或噪音,在模型训练前,务必对这些脏数据进行处理,否则,再好的模型,也只能脏数据进,脏数据出。这章我们主要介绍对数据处理涉及的一些操作,主要包括:特征提取特征转换特征选择4.1特征提取特征提取一般指从原始数据中抽取特征。4.1.1词频-逆向文件频率(TF-IDF)词频-逆向文件频率(T
- Spark权威指南读书笔记(二):结构化API
kaiker
第四章结构化API概述结构化API主要指三种核心分布式集合类型API:Dataset、DataFrame、SQL表和视图DataFrame和Dataset类型DataFrame和Dataset是具有行和列的类似于数据表的集合类型Spark中的DataFrame和Dataset代表不可变的数据集合Schema定义了DataFrame的列名和类型两者比较非类型化的DataFrame和类型化的Datas
- JAVA基础
灵静志远
位运算加载Date字符串池覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
- keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
- java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
- android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
- zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
- 详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
- spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
- hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
- EJB和javabean的区别
asia007
beanejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
- Struts的action和Result总结
百合不是茶
strutsAction配置Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
- 如何带好自已的团队
bijian1013
项目管理团队管理团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
- Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
- 【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
- 使用代理实现Hibernate Dao层自动事务
白糖_
DAOspringAOP框架Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
- maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
- 编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
- 读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
- [求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
- RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oraclermanfilespersetPARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
- 简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
- 初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
- I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
- 并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
- Spring Security(12)——Remember-Me功能
234390216
Spring SecurityRemember Me记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
- 位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
- nodejs 数据库连接 mongodb mysql
liguangsong
mongodbmysqlnode数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
- java动态编译
olive6615
javaHotSpotjvm动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
- Storm0.9.5的集群部署配置优化
roadrunners
优化storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
- 101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
- zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1