
Scala开发日志
文章平均质量分 63
翻译《Scala Develop Tutorials》文章
Just Jump
勿忘来时路上的脚印。站在巨人的肩膀上。
你没有比别人更努力,更不会比别人更不努力。你只是按照你能做到的、最适合你自己的办法去实现自己的目标,去成长为你眼中优秀的人们中的一员。
你自己、优秀的人群;决心、视野;自律、标准。
业精于勤,行成于思。
古之成大事者,不惟有超世之才,亦必有坚韧不拔之志。
苟有恒,何必三更起五更眠;最无益,只怕一日曝十日寒。 十五年只做一个行当。
展开
-
Python多线程-阻塞主线程
写在前面:前面已经有Scala实现多线程了,那么用Python实现多线程又有什么区别和好处?Scala里实现多线程,启的是同一个Application,计算多线程任务的task都是同时返回到driver中进行管理。而这些task的完成情况和状态管理会一直保存在driver中,直到Application结束。如果模型迭代次数很多,或者需要写循环来做多次计算时,这很容易导致driver的内存溢出。所以,为了同时实现多线程,而又不至于让Application任务太大、task太多、driver内存溢出原创 2021-09-26 12:26:10 · 1373 阅读 · 0 评论 -
记一次奇葩的Spark内存溢出OOM
错误信息如下:org.apache.spark.memory.SparkOutOfMemoryError: Unable to acquire 1048576 bytes of memory, got 65536内存溢出的位置:做JOIN操作的时候,内存溢出了。首先,定位下任务使用的资源,其次,调参数--driver-cores 4 \--driver-memory 8G \--executor-cores 4 \--executor-memory 16G \-..原创 2021-09-22 19:18:36 · 1788 阅读 · 0 评论 -
Scala常用小处理方法汇总
本文介绍case语法与match 、map结合使用完成业务中常见的分情况匹配或分情况讨论的场景问题。1、match ...case ...2、map ...case ...原创 2021-09-08 23:19:31 · 518 阅读 · 0 评论 -
Scala多线程之任务的异同、同步执行实践
近期使用Spark开发ML机器学习模型的时候,其中有一个部分需要交替搜索最优参数。待搜索的参数空间有上万维,如果参数搜索串行执行,那么上千次的迭代计算大约需要10个小时,对于线上部署的模型是万万不可取的。考虑到参数搜索部分的每次的计算量并不大,只是需要重复上万次,有一些迭代的搜索计算是不相互依赖的,可以并行计算。那么就考虑使用多线程的思想,并行执行一些计算任务。因为参数的更新需要等这些并行的计算任务都完成后 取他们计算结果汇总后的最大值,所以需要的是同步执行,即需要block阻塞。如果将多线原创 2021-09-02 01:07:33 · 840 阅读 · 0 评论 -
使用scala做二元分类模型的评价
1、假设我们有一个训练好的二元分类模型tvsFitted,我们看下能得到这个模型的哪些指标来评价这个模型的好坏。 //fit val tvsFitted = tvs.fit(trainData)2、模型训练结束后,使用summary来获取评价指标 //best model summary 获取训练时最优模型的评价指标 import org.apache.spark.ml.PipelineModel //获取最优模型 val trainedPipe原创 2021-08-29 21:05:28 · 287 阅读 · 0 评论 -
Scala中的容易混淆的符号->和 <- 和=>比较
写在前面:对于初学者来说,这几种符号实在太容易让人混淆了,还是有必要整理起来,相互比较下,对各符号的功能用途有了更深入的了解后自然就轻松了。参考文章:Scala中的 -> 与 <-以及=>Scala中"=>"的使用小结1、概括<- 只会出现在for循环里面-> 只会出现在Map里的key->value映射时=> 虽然出现的场景有四种,但背后代表的含义是统一的,即转化,从一种类型变成另一种类型。不管是用在函数、匿名函数,或是用在match匹配中,...转载 2021-08-08 08:00:52 · 682 阅读 · 0 评论 -
IDEA使用Maven创建Scala模块
1、IDEA -> File -> New -> Module 使用IDEA创建一个新的Module2、从现有的结构中创建3、设置Module名字、GroupId、SNAPSHOT版本4、选择Maven版本5、配置POM文件,添加依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xm...原创 2021-07-26 23:31:36 · 1229 阅读 · 1 评论 -
spark使用MLlib时pom.xml的配置
新项目要使用机器学习做一个二分类模型预测,在IDEA中使用Maven新创建了一个工程model,当我在脚本中import 相关模块的时候,提示无法加载。这是因为在maven仓库中还没有ML包,需要在POM文件中配置才行。一、POM文件配置方法第一步:在POM文件中配置spark-mllib依赖 <dependency> <groupId>org.apache.spark</groupId> .原创 2021-07-26 19:26:13 · 4080 阅读 · 0 评论 -
【转】Scala的5种运算:位运算、算术运算、关系运算、逻辑运算、赋值运算
最近刷leetcode刷到位运算相关的,比如191. 位1的个数、231. 2 的幂,所以这里补一下位运算相关的知识点。看到一篇文章对于Scala的5种运算,位运算、算术运算、关系运算、逻辑运算、赋值运算,写的很全面、详细,这里转载其中位运算的部分。有兴趣的同学可以去看原文。原文: Scala(3) -- scala运算符 ,原作者:erainm原文链接:https://blog.youkuaiyun.com/eraining/article/details/1086810785. 位运算符5...转载 2021-07-18 18:18:33 · 1178 阅读 · 0 评论 -
spark访问OSS文件时POM文件配置和使用方法
1、spark如果要访问OSS文件,需要在POM.xml文件中添加一些依赖。要添加的依赖是:(1)hadoop-jfs(2)jss-sdk-java添加方法,在<dependencies>...</dependencies>中添加 <dependency> <groupId>org.apache.hadoop</groupId> <art原创 2021-07-07 19:56:16 · 1013 阅读 · 2 评论 -
spark使用本地local模式时pom.xml的配置
1、本地local模式启动SparkSession我写了个脚本做使用本地local模式启动SparkSession,想做个简单的代码测试,如下://in scalapackage com.Toby.Gaoimport org.apache.spark.sql.SparkSessionobject Test { def main(args:Array[String]){ val spark = SparkSession .builder()原创 2021-07-07 19:36:48 · 962 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(上篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139018397这篇主要讲 重载overload 、封装Encapsulation。也是工程化的设计思想的产物。1 类(Class)、对象(Object)和构造器(Constructor)1.1 案例要求设计一个矩形的面积计算器,输入为矩形的高(height)和宽(width),输出为矩形的面积(area)。1.2 代码对JAVA的语法有最基本的...转载 2021-07-02 17:08:23 · 294 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139033198这篇主要讲的是继承extends和覆盖override。不管是继承、覆盖还是多态,甚至类、抽象类、接口,都是在体现一种工程化实现的设计思想。如果能从做工程、多方协作的设计师的视角去看待这些概念,你会更容易理解为什么要创造出来这些概念,为什么用这些概念或方法就能达到工程代码的易扩展、易维护的目的。1 继承(Inheritance)1....转载 2021-07-02 17:04:28 · 212 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(下篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139388786我觉得对于多态、抽象、接口、覆盖的案例讲解很是生动、详细和透彻了。必须强推!原作者是个人才!1 抽象(Abstrac)1.1 案例咱们再加一点难度。现在要求设计一个面积计算器,计算的对象包括平行四边形、梯形和圆。平行四边形的输入为高和宽,梯形的输入为高、上底长和下底长,圆的输入为直径(假定都是规范的数值输入),所有的输出均为面积。...转载 2021-07-02 16:09:36 · 263 阅读 · 0 评论 -
Scala类的单继承/多继承/private关键字问题
本文我们聊聊Scala类的单继承/多继承、private/public关键字问题。1、Scala的类是单继承的,但特质可以多继承1.1 首先,来看下多继承、单继承是什么意思,区别是什么?多继承:A类、B类是两个没有继承关系的类,C类即继承了A类又继承了B类。单继承:C类继承了B类,B类继承了A类,C、B、A是单一依次继承的关系。1.2 多继承相比于单继承有什么问题?为什么Scala采用单继承,而不是多继承?举一个多重继承的例子。蝙蝠即有鸟类的一些特征,又有哺乳动物类的一些原创 2021-07-01 16:07:20 · 2165 阅读 · 1 评论 -
Scala使用flatMap来实现UDTF的功能效果
写在前面:工作中发现大家经常写UDF,偶尔写UDAF,但几乎很少有人写UDTF。通常UDF、UDAF就能满足大多的工作需求了。当然有很多同事喜欢写map来代替写UDF,这是可以达到同样效果的。map的功能很强大。你会发现flatMap的功能也很强大。灵活使用它就完成可以实现写UDTF达到的效果。所以,这大概也是看同事代码的时候可以经常看到flatMap,而很少见到写UDTF的原因吧。当然还有使用mapPartition()的方法来达到UDAF同样效果的写法。我们在下一篇中介绍。直接上代码原创 2021-06-30 14:28:29 · 333 阅读 · 1 评论 -
10、Scala特质trait
特质 (Traits) 用于在类 (Class)之间共享程序接口 (Interface)和字段 (Fields)。 它们类似于Java 8的接口。 类和对象 (Objects)可以扩展特质,但是特质不能被实例化,因此特质没有参数。翻译 2021-06-11 19:44:38 · 213 阅读 · 0 评论 -
9、Scala对象object
本文介绍Scala中的迭代器Iterator。1、基本知识Scala中迭代器Iterator允许用户通过迭代的方式访问数据集。一个迭代器的核心操作就两个:next 和 hasNext。hasNext检查后续元素是否存在,next()返回后续的元素,2、Iterator迭代器的声明/定义方法...翻译 2021-06-02 16:23:10 · 1699 阅读 · 0 评论 -
8、Scala类class
本文介绍Scala中的类class。1、基本知识类Classes是一个静态的模版,任何的对象object都可以在执行的时候初始化一个类实例。就是说类只是一个模版,它要在object中调用实例才会被执行。class的实例化使用关键字new。2、class类的定义方法2.1 通过关键字class来定义类。类中变量的声明和初始化通过关键字 val /var,这是一样的。类中方法的定义也是通过关键字 def。类中方法的重写通过关键字 override def 。//in .原创 2021-05-27 17:54:25 · 1637 阅读 · 0 评论 -
7、Scala迭代器Iterator
本文介绍Scala中的Array数据结构。1、基本知识Scala中Array是一个固定大小、存储的元素类型都相同的数据结构。Array的index是从 0 开始的,最大为 Array长度-1。2、Array的定义/声明方法翻译 2021-05-25 17:23:40 · 552 阅读 · 0 评论 -
6、Scala容器Option
本文介绍Scala中的Array数据结构。1、基本知识Scala中Array是一个固定大小、存储的元素类型都相同的数据结构。Array的index是从 0 开始的,最大为 Array长度-1。2、Array的定义/声明方法翻译 2021-05-25 16:36:35 · 384 阅读 · 0 评论 -
5、Scala数据结构Set
本文介绍Scala中的Set数据结构。1、基本知识Scala中Set存储的元素类型都是相同的、并且元素是唯一的。Scala中List可以存储重复的元素,但是Set中的元素都是唯一的、不重复的。Set有可变的、不可变的两种类型。 默认的是不可变的。如果要使用可变的Set,需要导入包名//in scalaimport scala.collection.mutable.Set2、Set的定义/声明方法2.1 定义不可变的Set//1、定义不可变的Setval count翻译 2021-05-24 13:18:57 · 329 阅读 · 0 评论 -
4、Scala数据结构List
本文介绍Scala中的List数据结构。1、基本知识Scala中List是存储元素类型都相同的数据结构。List和Array很相似,但有两点不同。首先,List是不可变的,Array是可变的。其次,List是链式存储(linked list)的列表,而Array是flat存储的。List的index是从 0 开始的,最大为长度-1。2、List的定义/声明方法2.1 直接通过赋值实例化//in scalaval studentNames:List[String] = Lis.翻译 2021-05-23 01:07:46 · 561 阅读 · 0 评论 -
3、Scala数据结构Array
本文介绍Scala中的Array数据结构。1、基本知识Scala中Array是一个固定大小、存储的元素类型都相同的数据结构。Array的index是从 0 开始的,最大为 Array长度-1。2、Array的定义/声明方法2.1 直接实例化//in scala//直接实例化定义一个Arrayvar student = Array("John","Adam","Rob","Reena","Harry")2.2 先声明一个array变量 ,后为其赋值//in scala翻译 2021-05-22 10:42:43 · 934 阅读 · 0 评论 -
2、Scala数据结构Tuple
本文介绍Scala中的Tuple数据类型。1、基本知识tuple元组是一些不同类型的元素的集合。Scala中的tuple是 不可变数据类型(immutable),即一旦声明后就不能改变其值。一个元组tuple的最大元素上限是22。即可使用的tuple类型 TupleN(N元组),1<=N<=22。2、Tuple的定义方法2.1 方法一:直接定义。好处是不用声明Tuple的长度,简便val s1 = (12,"Harry")val m1 = (20,12,16,4)翻译 2021-05-21 10:05:03 · 512 阅读 · 0 评论 -
1、Scala数据结构Map
本文介绍Scala中的Map数据类型。1、基本知识Map是健值对映射集合,key要求是唯一的。Map中数据是无序的。Map有两种类型,可变的(mutable)、不可变的(immutable)。不可变类型的Map对象一经实例化后不可修改数据,Scala默认使用的是 不可变类型的Map。如果要使用可变类型的Map,需要导入包import scala.collection.mutable.Map2、Map的定义方法(1)定义一个不可变类型的Map//in scala 默翻译 2021-05-20 16:09:29 · 1110 阅读 · 0 评论 -
scala利用Buffer写UDF生成List/Array/Map数据类型
一、利用ArrayBuffer写UDF处理数据生成Array数据类型1、核心代码://导入包import scala.collection.mutable.ArrayBuffer//定义一个可变的ArrayBuffervar result = ArrayBuffer[Int]()//追加数据result += userType//转为Arrayresult.toArray2、实践代码示例://in scalapackage com.toby.gao.scala原创 2021-05-11 14:29:14 · 532 阅读 · 0 评论 -
Scala日期格式转换
1、scala中日期格式yyyyMMdd 、yyyy-MM-dd的相互转换,import java.text.SimpleDateFormatdef DateFormatTransfer(DateString:String):String ={ val format1 = new SimpleDateFormat("yyyyMMdd") //定义输入/输出日期格式 val format2 = new SimpleDateFormat("yyyy-MM-dd") //定义输入/输出日期格..原创 2021-05-06 19:14:25 · 3102 阅读 · 0 评论