scala

半小时,利用FEDB将你的Spark SQL模型变为在线服务

穿精又带淫゛_ 提交于 2020-08-09 22:41:02
SparkSQL在机器学习场景中应用 第四范式已经在很多行业落地了上万个AI应用,比如在金融行业的反欺诈,媒体行业的新闻推荐,能源行业管道检测,而SparkSQL在这些AI应用中快速实现特征变换发挥着重要的作用 SparkSQL在特征变换主要有一下几类 1. 多表场景,用于表之间拼接操作,比如交易信息表去拼接账户表 2. 使用udf进行简单的特征变换,比如对时间戳进行hour函数处理 3. 使用时间窗口和udaf进行时序类特征处理,比如计算一个人最近1天的消费金额总和 SparkSQL到目前为止,解决很好的解决离线模型训练特征变换问题,但是随着AI应用的发展,大家对模型的期望不再只是得出离线调研效果,而是在真实的业务场景发挥出价值,而真实的业务场景是模型应用场景,它需要高性能,需要实时推理,这时候我们就会遇到以下问题 1. 多表数据离线到在线怎么映射,即批量训练过程中输入很多表,到在线环境这些表该以什么形式存在,这点也会影响整个系统架构,做得好能够提升效率,做得不好就会大大增加模型产生业务价值的成本 2. SQL转换成实时执行成本高,因为在线推理需要高性能,而数据科学家可能做出成千上万个特征,每个特征都人肉转换,会大大增加的工程成本 3. 离线特征和在线特征保持一致困难,手动转换就会导致一致性能,而且往往很难一致 4. 离线效果很棒但是在线效果无法满足业务需求 在具体的反欺诈场景

阿里P8教你如何学习JVM

落爺英雄遲暮 提交于 2020-08-09 20:33:36
前言 提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。 为了帮助大家更好的学习JVM,小编送给大家一本PDF书籍,详见下文啦~ 一、什么是JVM? JVM简介: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说JVM是用来解析和运行Java程序的。 Java有一个非常重要的特点“平台的无关性”,就是使用JVM实现的。Java语言只需要生成Jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为JVM本身屏蔽了与具体平台相关的信息,使得Java能够“一次编译,到处运行”。 二、为什么要学习JVM? 学习JVM无外乎以下几个原因: 1、 程序调优 不同的程序(业务场景)需要不同的Jvm配置,比如设置不同的垃圾收集器、设置新生代和老生带的内存配置和占比等,不同的配置对于程序的运行有着千差万别的影响。而Jvm默认的配置只能保证程序能够“运行”,而想要“很好的运行”甚至是“更好的运行”,就是学习Jvm最主要的因素之一。 2、 排查程序运行问题 有些程序可能在线上使用的时候会遇到各种各样的问题

java并发编程 --并发问题的根源及主要解决方法

情到浓时终转凉″ 提交于 2020-08-09 17:55:41
文章目录 并发问题的根源在哪 缓存导致的可见性 线程切换带来的原子性 编译器优化带来的有序性 主要解决办法 避免共享 Immutability(不变性) 管程及其他工具 并发问题的根源在哪 首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题。而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大。如果将CPU的速度比作火箭的速度,那么内存的速度就像火车,而最惨的磁盘,基本上就相当于人双腿走路。 这样造成的一个问题,就是CPU快速执行完它的任务的时候,很长时间都会在等待磁盘或是内存的读写。 计算机的发展有一部分就是如何重复利用资源,解决硬件资源之间效率的不平衡,而后就有了多进程,多线程的发展。并且演化出了各种为多进程(线程)服务的东西: CPU增加缓存机制,平衡与内存的速度差异 增加了多个概念,CPU时间片,程序计数器,线程切换等,用以更好得服务并发场景 编译器的指令优化,希望在 内部 充分利用硬件资源 但是这样一来,也会带来新的并发问题,归结起来主要有三个。 由于缓存导致的可见性问题 线程切换带来的原子性问题 编译器优化带来的有序性问题 我们分别介绍这几个: 缓存导致的可见性 CPU为了平衡与内存之间的性能差异,引入了CPU缓存,这样CPU执行指令修改数据的时候就可以批量直接读写CPU缓存的内存,一个阶段后再将数据写回到内存。

Python 为什么用 # 号作注释符?

放肆的年华 提交于 2020-08-09 17:29:10
关于编程语言中的注释,其重要性基本上已为大家所共识。 然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。 注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。 比如行注释符,它至少有以下的 17 种之多(出自 维基百科 ): 其中两个最大的阵营分别是“//”与“#”号: // 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo # 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim 那么,**Python 为什么用“#”号作注释符,而不是“//”呢? ** 这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。 我没有找到官方的解释,但是从这些注释符的阵营中,已经不难得出一个较为合理的解释: // 注释符基本上被

kafka2.0.0第一课 部署配置启动

为君一笑 提交于 2020-08-09 15:53:42
1)背景 软件版本2.0.0 Released July 30, 2018 Release Notes Source download: kafka-2.0.0-src.tgz (asc, sha512) Binary downloads:We build for multiple versions of Scala. This only matters if you are using Scala and you want a version built for the same Scala version you use. Otherwise any version should work (2.11 is recommended). Scala 2.11 - kafka_2.11-2.0.0.tgz (asc, sha512) Scala 2.12 - kafka_2.12-2.0.0.tgz (asc, sha512) 软件下载地址 http://kafka.apache.org/downloads.html 下载安装包 kafka_2.11-2.0.0.tgz 2)部署 cd kafka_2.11-2.0.0 chmod a+x bin/* //赋予服务器脚本运行需要的执行权限 vi config/server.properties //配置服务器的IP地址

Python 为什么用 # 号作注释符?

依然范特西╮ 提交于 2020-08-09 10:38:19
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 关于编程语言中的注释,其重要性基本上已为大家所共识。 然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。 注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。 比如行注释符,它至少有以下的 17 种之多(出自维基百科): 其中两个最大的阵营分别是“//”与“#”号: // 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim 那么, Python 为什么用“#”号作注释符,而不是“//”呢? 这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。

How to read a Nested JSON in Spark Scala?

空扰寡人 提交于 2020-08-09 08:48:09
问题 Here is my Nested JSON file. { "dc_id": "dc-101", "source": { "sensor-igauge": { "id": 10, "ip": "68.28.91.22", "description": "Sensor attached to the container ceilings", "temp":35, "c02_level": 1475, "geo": {"lat":38.00, "long":97.00} }, "sensor-ipad": { "id": 13, "ip": "67.185.72.1", "description": "Sensor ipad attached to carbon cylinders", "temp": 34, "c02_level": 1370, "geo": {"lat":47.41, "long":-122.00} }, "sensor-inest": { "id": 8, "ip": "208.109.163.218", "description": "Sensor

乐字节-Java8核心实战之三:函数式接口

 ̄綄美尐妖づ 提交于 2020-08-09 08:40:24
Java8 引入 Lambda 表达式,允许开发者将函数当成参数传递给某个方法,或者把代码本身当作数据进行处理。使用 Lambda 表达式,使得应用变得简洁而紧凑。 很多语言(Groovy、Scala 等)从设计之初就支持 Lambda 表达式。但是 java 中使用的是匿名内部类代替。最后借助强大的社区力量,找了一个折中的 Lambda 实现方案,可以实现简洁而紧凑的语言结构。 一、匿名内部类到Lambda的演化 匿名内部类,即一个没有名字的,存在于一个类或方法内部的类。当我们需要用某个类且只需要用一次,创建和使用合二为一时,我们可以选择匿名内部类,省掉我们定义类的步骤。 匿名内部类会隐士的继承一个类或实现一个接口,或者说匿名内部类是一个继承了该类或者实现了该接口的子类匿名对象。下面看一个匿名内部类的例子 package com.java8; /* 定义和使用匿名内部类 */ public class NoNameClass { public static void main(String[] args) { Model m = new Model(){ @Override public void func() { System.out.println("方法的实现"); } }; m.func(); } } // 需要被实现的接口 interface Model{ void

Scala 实现Python Arange

大城市里の小女人 提交于 2020-08-09 03:28:34
使用scala时有arange的需求,但是没有找到相对应函数,只找到了group,sliding函数,于是自己实现一个: 目标: 给定起点,终点和份数,得到arange结果 实现: 计算起始点长度与分类数,得到每一步的Step,然后循环添加即可。这里还加了隐式转换是为了函数传参类型转换。 private implicit def doubleToFloat(number: Double): Float ={ number.toFloat } private def getPercent(st: Float, end: Float, num: Int): Array[String] = { val step = (end - st) / num (0 to num).map(x => { val per = st + x * step per.formatted("%.2f") }).toArray } 结果: 1)小数 val arange = getPercent(0,0.5,10) println(arange.mkString("\t")) 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 2)整数 val arange = getPercent(10,100,10) println(arange.mkString(

springboot基于spark-launcher构建rest api远程提交spark任务

ぐ巨炮叔叔 提交于 2020-08-08 13:10:57
参考文章: 使用springboot构建rest api远程提交spark任务 spark-submit动态提交的办法(SparkLauncher实战) 用java提交一个Spark应用程序 Spark-利用SparkLauncher 类以JAVA API 编程的方式提交spark job --impt 官网API参考: http://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/launcher/package-summary.html github代码链接:github地址 1. spark集群及版本信息 服务器版本:centos7 hadoop版本:2.8.3 spark版本:2.3.3 使用springboot构建rest api远程提交spark任务,将数据库中的表数据存储到hdfs上,任务单独起一个项目,解除与springboot项目的耦合 2. 构建springboot项目 1. pom配置 <properties> <java.version>1.8</java.version> <spark.version>2.3.3</spark.version> <scala.version>2.11</scala.version> </properties> <dependencies>