关于异常:MaxCompute中如何处理异常字符

背景在解决数据时,当业务数据同步至MaxCompute后,会产生一些含异样字符的脏数据,比方字段中蕴含了一个不可见字符,在DataWorks中显示不进去,但在BI界面又会显示成其余字符,影响整体观感。这种状况,通常咱们的解法是,将异样的字符洗掉,上面来介绍几种常见的解决异样字符的办法。 问题形容定位如下图,能够看到“异样name”和“失常name”的 length值 不同,多了个不可见字符,然而咱们并不能看进去啥。前期做数据处理或数据展现可能成为一个难以定位的问题。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1155505?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

July 11, 2023 · 1 min · jiezi

关于异常:带你读论文丨异常检测算法及发展趋势分析

摘要:本文依据对现有基于深度学习的异样检测算法的调研,介绍现有的深度异样检测算法,并对深度异样检测算法的将来发展趋势进行大抵的预测。本文分享自华为云社区《【论文浏览】异样检测算法及发展趋势剖析》,原文作者:MUR11。 异样检测问题是很多理论利用场景中的一个重要问题。本文依据对现有基于深度学习的异样检测算法的调研,介绍现有的深度异样检测算法,并对深度异样检测算法的将来发展趋势进行大抵的预测。 一、异样检测利用场景异样检测在理论生产生存中有大量的利用。例如:从信用卡交易记录中找出潜在的盗刷或套现记录、在交通监控视频中找出守法的交通参与者、在医学影像中找出病变的组织、在网络中找出找出入侵者、从物联网传输的信号中找出异样传输等。 以后大部分异样检测场景高度依赖人工,对于人力有大量的需要。将来随着老龄化加剧、工作人口减少,应用算法代替人工进行异样是大势所趋。 二、常见异样类型常见的异样类型能够分为三类: 点异样:单个样本/采样点显著偏离其余所有样本/采样点的散布。例如:在信用卡交易记录中,如果一个用户日常的交易都是小额交易,忽然呈现的一笔大额交易就是一个点异样。条件异样:单个样本/采样点与其余一些条件的联结散布显著偏离其余样本/采样点的状况,称为条件异样。例如:某地一年内的气温变动范畴为-10度到40度,失常状况下每日气温应该在上述范畴内。然而如果冬季的某一天温度达到-5度,尽管当天温度仍在失常范畴内,然而联合节令来看则是一个显著的异样,这类异样属于条件异样。群体异样:单个样本/采样点失常,然而大量样本/采样点整体呈现出异样。例如:仍以信用卡交易记录为例,如果一个用户日常的交易都是小额交易,某一天忽然呈现了10笔小额交易,且每笔交易的金额雷同,尽管从每笔交易来看都合乎用户的应用习惯,然而这10笔交易联合在一起看却存在异样,该类异样属于群体异样。上述三类异样中,条件异样通过肯定的转换后等价于点异样,因而实际上常见的异样类型只有点异样、群体异样两种。以后业界的钻研和利用次要集中在点异样的检测上,下文也将重点介绍点异样的检测算法。 三、异样检测算法以后支流的异样检测算法通常基于深度学习技术,依照应用的监督信息能够分为有监督办法、无监督办法、半监督办法。此外,也有一些将深度学习技术和传统的非深度学习技术联合在一起的异样检测算法。上面对这几类办法别离开展介绍。 3.1深度有监督办法深度有监督学习是目前深度学习钻研最充沛、利用最宽泛的一类办法。利用这类办法进行异样检测时,包含数据收集、模型训练、模型推理三个阶段: 数据收集:收集失常样本、异样样本,并对样本进行标注;模型训练:应用标注好的样本训练模型,以基于图像的异样检测为例,常见的模型包含图像分类模型(判断样本是否异样)、指标检测模型(大抵定位图像中异样的地位)、语义宰割模型(精确定位图中异样的区域);模型推理:将待剖析的样本喂给模型,模型通过运算后,输入后果。这类办法的长处是实现简略、精度高,毛病是须要收集大量的失常样本和异样样本并进行标注。理论中,异样样本往往是很稀缺的,通常难以收集足够数量的异样样本来训练模型,因而也就无奈利用深度有监督异样检测办法。 3.2 深度无监督办法为了更好地应答理论利用中难以收集到足够数量的异样样本的状况,深度无监督异样检测办法通过建模失常样本,来间接地实现异样检测的性能。具体来说,深度无监督异样检测的步骤如下: 数据收集:收集大量失常样本;模型训练:通过训练模型建模失常样本,罕用的模型包含自编码器、生成反抗网络等;模型推理:将待剖析的样本喂给模型,失去模型的输入;比对:通过比看待剖析的样本和模型的输入之间的差别,基于当时设定的阈值判断是否存在异样。该类办法是目前应用深度学习技术进行异样检测的支流办法,其中具备代表性的两类模型别离是自编码器和生成反抗网络。 3.2.1 自编码器仍以图像异样检测工作为例。应用自编码器模型检测图像中的异样时,流程如下: 数据收集:收集大量失常的图片;模型训练:模型构造如下图所示 [1]。训练时,模型的输出是失常的图片;训练的指标是使模型的输入与输出尽可能雷同,罕用的掂量指标包含像素级的L2损失、L1损失、SSIM损失等。这类办法的假如是:因为训练过程中模型只见过失常图片,因而无论输出什么样的图片,模型都会偏向于将输出图片重构为失常图片,因而异样图片的重构后果会和输出图片之间存在显著的差别;模型推理:以待剖析的图片作为模型的输出,模型通过运算后,输入一张通过模型重构的图像;比对:通过判断输出图像和输入图像之间的像素级重构误差(个别通过L2损失或SSIM损失计算失去),通过将重构误差的值和当时设定的阈值进行比拟,如果重构误差的值小于阈值,则断定不存在异样,否则认为图像中存在异样。3.2.2 生成反抗网络应用生成反抗网络模型检测图像中的异样时,流程如下: 数据收集:收集大量失常的图片;模型训练:模型构造如下图所示 [2]。训练时,模型的输出是失常的图片,训练的指标是使模型生成的图片和实在的失常图片具备雷同的散布。该训练过程通过生成器和判断器两个子模型独特实现,其中判断器的指标是尽量辨别出哪些图片是模型生成的,哪些是实在的;而生成器的指标是尽量生成真切的图片,让判断器无奈辨别;模型推理:通过特定的操作步骤,使生成器生成出和待剖析图片尽可能类似的图片。例如:通过梯度反传的办法,迭代更新生成器的输出变量z,直到z通过生成器生成的输入和待剖析的图像之间的类似度达到最大为止;比对:通过判断待剖析的图像和生成的图像之间的像素级差别(个别通过L2损失或SSIM损失计算失去),通过将差别的值和当时设定的阈值进行比拟,如果差别的值小于阈值,则断定不存在异样,否则认为图像中存在异样。3.2.3 小结以上两个大节简略介绍了两种典型的深度无监督异样检测算法的实现步骤。从上述步骤能够看出,无监督异样检测算法通常是通过计算重构或生成的图像与理论图像之间的差别来判断是否存在故障。这种办法尽管不须要异样样本,更适宜理论场景,然而毛病也比拟显著——抗噪声烦扰的能力比拟差。因为像素级的差别不肯定是理论的故障造成的,也有可能是污渍等无关痛痒的烦扰造成的,而深度无监督异样检测算法无奈辨别这些不同的差别,因而在理论利用中,深度无监督异样检测算法的误报通常较多。 3.3 深度半监督办法理论中有时也能收集到大量的异样样本,为了尽可能充沛地利用这些异样样本晋升异样检测算法的精度,学术界提出了一类深度半监督异样检测算法,该类算法的次要步骤如下: 数据收集:收集大量的图片,其中既蕴含失常图片,也蕴含异样图片;模型训练:模型构造如下图所示 [3]。训练时,模型并不知道哪些是失常图片,哪些是异样图片,因而并不是通过有监督的形式进行辨认,而是将传统非深度的One-class SVM的损失迁徙到了深度学习模型中;模型推理:将待剖析的图片喂给模型,模型通过一系列运算后,失去一个数值作为输入,通过将该输入值与事后设置的阈值进行比拟,如果输入值大于阈值则断定为异样,否则断定为失常。该类办法的长处是数据收集简略,并且能够端到端的进行示意学习和分类器的学习,然而往往训练过程中须要尝试大量的参数,训练耗时较长。 3.4 深度-非深度混合办法除上述齐全基于深度学习的异样检测算法外,近年来也有一些将深度学习和传统的非深度异样检测办法联合在一起的办法,如下图所示。这类办法中,深度学习模型仅作为特征提取器,而外围的辨认异样的性能由传统异样检测算法实现。 这类办法的长处是能够灵便组合不同的深度学习模型和非深度的异样检测算法,毛病是特色示意学习的过程和断定的过程割裂开了,导致断定的过程不能副作用于特色示意学习的过程,深度学习模型提取的特色不肯定可能表征出异样,也不肯定可能和后续的异样检测算法相匹配。 四、发展趋势本节联合前文内容,对异样检测畛域中几个有价值的钻研场景进行总结,并对将来的钻研趋势进行大抵的预测: 深度有监督办法:以后深度有监督异样检测算法的精度尽管很高,然而因为这类办法高度依赖于大量有标注的失常样本和异样样本,因而在理论中很难找到可能利用的场景。如果想要扩充适用范围,将来如何在小样本条件下,失去泛化性能强的模型,是这类办法须要冲破的重点和难点。深度无监督办法:以后深度无监督异样检测算法对于数据的要求较低,适用范围也较大,然而因为这类办法抗干扰能力较差,理论中误报数量往往较多,影响了理论应用时的用户感触。因而,如何进一步建模噪声烦扰或克制噪声烦扰,是这类办法将来钻研的重点。群体异样检测:群体异样检测是近年来刚刚衰亡的钻研方向,目前还处于起步阶段,将来的钻研方向、办法依然存在很大的不确定性,然而该方向无望成为将来的热点钻研方向之一。参考文献[1] Paul Bergmann, Sindy Loewe, Michael Fauser, David Sattlegger, Carsten Steger. Improving Unsupervised Defect Segmentation by Applying Structural Similarity To Autoencoders. arXiv 2019. [2] Thomas Schlegl, Philipp Seeböck, Sebastian M. Waldstein, Ursula Schmidt-Erfurth, Georg Langs. Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery. arXiv 2017. ...

May 31, 2021 · 1 min · jiezi

关于异常:几种分布式下的错误处理方式

Failover(故障转移/故障切换)即当流动的服务或利用意外终止时,疾速启用冗余或备用的服务器、零碎、硬件或者网络接替它们工作。比方一个负载均衡器下挂的多台服务,产生申请是如果一个后端服务挂了,负载均衡器能够主动切换到另一个 Failback(故障复原)故障复原是指,当服务呈现故障后,还能够复原到故障之前的状态。 比方一个合格的数据库系统,在I/O操作执行一半后(比方写数据+写索引两个文件)产生异样宕机,重启后也不会产生数据错乱 或者近程调用时,如果本次调用失败,能够思考稍后再重试 Fail-fast(early)(疾速失败/提前失败)大多状况下,程序宕机或者解体的影响并没有那么大,因为解体或谬误数据造成的一系列问题才是最致命的,比方各种费用计算错误等。 Fail-fast就是让程序提前解决失败,如果检测到会呈现谬误,让程序立即产生故障/异样,而不是让程序持续运行造成更重大的结果 校验前置就是一个很根本的Fail-fast解决策略,数据校验不通过时间接抛出谬误,不继续执行。比方Java里的ConcurrentModificationException异样,就算是一个Fail-fast解决,当检测到数据并并行批改时,不解决数据间接抛出异样完结操作,这样就保障了数据的平安,尽管操作被终止了。 Fail-safe(平安失败)平安失败是指当一个服务或软件出现异常时,也不会对使用者和服务本身造成更大的影响(或者将影响最小化)。 比方在近程调用中,当外部有异样时,最好是外部将异样消化了同时返回平安数据给调用方(比方空数据),同时记录错误信息,或敌对的返回给调用者 平安失败有时也叫防呆设计,比方CPU装置时的卡槽,如果没有对准的话是装不进去的,避免因为方向弄错而损坏CPU

January 18, 2021 · 1 min · jiezi

java-springboot-自定义错误

自定义返回resultpublic class CustomResult { /** * 状态响应码 */ private String code; /** * 响应信息 */ private String message; /** * 响应数据 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Object data; /** * 数据总数 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Long totalCount; public CustomResult setCode(CustomResultCode customResultCode) { this.code = customResultCode.code(); return this; } public String getCode() { return code; } public String getMessage() { return message; } public CustomResult setMessage(String message) { this.message = message; return this; } public Object getData() { return data; } public CustomResult setData(Object data) { this.data = data; return this; } public Long getTotalCount() { return totalCount;} public CustomResult setTotalCount(Long totalCount) { this.totalCount = totalCount; return this; }}自定义错误codepublic enum CustomResultCode { Custom_SUCCESS("1"), //成功 Custom_Fail("0"); // 失败 private final String code; CustomResultCode(String code) { this.code = code; } public String code() { return code; }}测试@RequestMapping("test-custom-exception") public void testCustomException() { throw new CustomException("自定义错误"); }结果{"code":"0","message":"自定义错误"}

June 1, 2019 · 1 min · jiezi

java-springboot-全局异常处理

定义全局返回resultpublic class Result { /** * 状态响应码 */ private int code; /** * 响应结果 成功/失败 */ private boolean success; /** * 响应信息 */ private String message; /** * 响应数据 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Object data; /** * 数据总数 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Long totalCount; public Result setCode(ResultCode resultCode) { this.code = resultCode.code(); return this; } public int getCode() { return code; } public boolean isSuccess() { return success; } public Result setSuccess(boolean success) { this.success = success; return this; } public String getMessage() { return message; } public Result setMessage(String message) { this.message = message; return this; } public Object getData() { return data; } public Result setData(Object data) { this.data = data; return this; } public Long getTotalCount() { return totalCount;} public Result setTotalCount(Long totalCount) { this.totalCount = totalCount; return this; }}定义全局resultCodepublic enum ResultCode { SUCCESS(200),//成功 FAIL(400),//失败 UNAUTHORIZED(401),//未认证(签名错误) 未登录 NOT_FOUND(404),//接口不存在 INTERNAL_SERVER_ERROR(500);//服务器内部错误 private final int code; ResultCode(int code) { this.code = code; } public int code() { return code; }}定义返回工具类@Slf4jpublic class ReturnUtils { private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS"; public static Result success() { return new Result().setCode(ResultCode.SUCCESS) .setSuccess(true) .setMessage(DEFAULT_SUCCESS_MESSAGE); } public static Result success(String msg) { return new Result().setCode(ResultCode.SUCCESS) .setSuccess(true) .setMessage(msg); } public static Result success(String msg, Object data, long totalCount) { return new Result().setCode(ResultCode.SUCCESS) .setMessage(msg) .setData(data) .setSuccess(true) .setTotalCount(totalCount); } public static Result fail(String msg) { log.error(msg); return new Result().setCode(ResultCode.FAIL) .setSuccess(false) .setMessage(msg); } public static Result fail(ResultCode code, String msg) { log.error(msg); return new Result().setCode(code) .setSuccess(false) .setMessage(msg); }}定义全局异常处理类@Slf4j@RestControllerAdvicepublic class ExceptionAdvice { @ExceptionHandler(Exception.class) public Result exceptionHandler(HttpServletResponse resp, Exception e) { log.error(e.getMessage()); return ReturnUtils.fail(ResultCode.INTERNAL_SERVER_ERROR, e.getMessage()); }}测试@RequestMapping("test-exception") public void testException() { try { int i = 1 / 0; } catch (Exception e) { throw new RuntimeException("服务器发生错误,请联系管理员"); } }结果{ "code":500, "success":false, "message":"服务器发生错误,请联系管理员"}

June 1, 2019 · 2 min · jiezi

关于try、catch、finally的执行顺序

先来看牛客上的一道题public class TestDemo { public static String output =""; public static void foo(int i){ try{ if(i == 1){ throw new Exception(); } }catch(Exception e){ output += “2”; return ; }finally{ output += “3”; } output += “4”; } public static void main(String[] args) { foo(0); foo(1); System.out.println(output); } }当执行foo(0)时,首先进入try块,不满足,继而进入finally,最后执行try-catch-finally外部的代码,所以output变为“34”, 然后是foo(1),进入try块,try中抛出异常,有匹配的catch语句,则catch语句捕获,然后,因为catch中有return语句,则return要在finally执行后再执行;try-catch-finally之外的代码就不再执行了(因为有return打断),所以最终output的值为“3423”如果这个例子中的catch语句没有return,那么输出的结果就应该是“34234”. 从此例可以看出亮点:1、try中没有抛出异常,则catch语句不执行,如果有finally语句,则接着执行finally语句,继而接着执行finally之后的语句;2.不管是否try…catch,finally都会被执行。当try…catch中有return的话,finally后会执行try…catch中的return,然后不再执行后续语句。也就是说finally字句中的语句总会执行,即使有return语句,也是在return之前执行。3、还有一点:finally前有return、finally块中也有return,先执行前面的return,保存下来,再执行finally的return,覆盖之前的结果,并返回。再一个例子public class Test{ public static int aMethod(int i)throws Exception { try{ return i / 10; } catch (Exception ex) { throw new Exception(“exception in a Method”); } finally{ System.out.printf(“finally”); } } public static void main(String [] args) { try { aMethod(0); } catch (Exception ex) { System.out.printf(“exception in main”); } System.out.printf(“finished”); }}此题输出结果为 finally finished如果将aMethod中的i/10换成10/i,则输出结果为 finally exception in main finished ...

March 19, 2019 · 1 min · jiezi

Prometheus 500 Internal Privoxy Error 异常解决

Prometheus 500 Internal Privoxy Error 异常解决访问Prometheus web-ui时异常Privoxy encountered an error while processing your request:Could not load template file no-server-data or one of its included components.Please contact your proxy administrator.If you are the proxy administrator, please put the required file(s)in the (confdir)/templates directory. The location of the (confdir) directory is specified in the main Privoxy config file. (It’s typically the Privoxy install directory).解决方案翻墙软件因开全局代理导致异常,将全局代理修改为自动代理就解决

February 27, 2019 · 1 min · jiezi

Java运行时异常与一般异常有什么不一样?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。一、Error和ExceptionThrowable是所有Java程序中错误处理的父类,有两种资类:Error和Exception。Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。Exception:表示可恢复的例外,这是可捕捉到的。二、Java两类主要的异常Java提供了两类主要的异常:runtime exception和checked exception。checked异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。三、Java运行异常出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。异常处理的目标之一就是为了把程序从异常中恢复出来。更多请访问上海尚学堂Java培训,获取Java300集和面试全集等学习资料和免费试学机会。

January 9, 2019 · 1 min · jiezi